#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=1005;
int p[MAXN],f[MAXN],n,m,vis[MAXN],cnt,ans;
int re(){
int k=1,s=0;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-'){k=-1;}ch=getchar();}
while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
return k*s;
}
void work(){//质数筛
cnt=0;
for(int i=2;i<=n;i++){
if(!vis[i]) p[++cnt]=i;
for(int j=1;j<=cnt && i*p[i<=n];j++)
vis[i*p[j]]=1;
}
}
void dp(){
f[0]=1;
for(int i=1;i<=cnt;i++)
for(int j=n;j>=p[i];j--){
int k=p[i];
for(;k<=j;k*=p[i]){//枚举
f[j]+=f[j-k]*k%m;
f[j]%=m;
}
}
for(int i=0;i<=n;i++) ans=(ans+f[i])%m;
cout<<ans<<'\n';
}
signed main(){
n=re();m=re();
work();
dp();
return 0;
}
神秘RE求调