#include<cstdio>
#include<cstring>
#define MN 500
int mod,u[MN+5],p[MN+5],pn,f[2][1<<8][1<<8],ff[1<<8][1<<8];
inline void upd(int&a,int b){a+=b;if(a>=mod)a-=mod;}
int main()
{
int n,l,i,j,k,nw,ls,x,ans=0;
scanf("%d%d",&n,&mod);
for(i=2;i<=MN;++i)
{
if(!u[i])p[++pn]=i,u[i]=pn;
for(j=1;i*p[j]<=MN;++j){u[i*p[j]]=j;if(i%p[j]==0)break;}
}
for(nw=0,ls=f[0][0][0]=1,i=2;i<=n;++i)
{
for(x=0,j=i;j>1;j/=p[u[j]])
{
if(u[j]>8)break;
x|=1<<u[j]-1;
}
if(j>1)continue;
nw^=1;ls^=1;memset(f[nw],0,sizeof(f[nw]));
for(j=0;j<1<<8;++j)for(k=0;k<1<<8;++k)
{
upd(f[nw][j][k],f[ls][j][k]);
if(!(j&x))upd(f[nw][j][k|x],f[ls][j][k]);
if(!(k&x))upd(f[nw][j|x][k],f[ls][j][k]);
}
}
for(l=9;l<=pn;++l)
{
nw^=1;ls^=1;
for(j=0;j<1<<8;++j)for(k=0;k<1<<8;++k)f[nw][j][k]=mod-f[ls][j][k],ff[j][k]=f[ls][j][k];
for(i=p[l];i<=n;i+=p[l])
{
for(x=0,j=i;j>1;j/=p[u[j]])
if(u[j]<9)x|=1<<u[j]-1;
for(j=1<<8;j--;)for(k=1<<8;k--;)
if(!(k&x))upd(ff[j|x][k],ff[j][k]);
}
for(j=0;j<1<<8;++j)for(k=0;k<1<<8;++k)upd(f[nw][j][k],(ff[j][k]+ff[k][j])%mod);
}
for(j=0;j<1<<8;++j)for(k=0;k<1<<8;++k)upd(ans,f[nw][j][k]);
printf("%d",ans);
}