1. #include <cstdio>
    2. #include <algorithm>
    3. #include <cmath>
    4. #include <cstdlib>
    5. #include <cstring>
    6. #include <iostream>
    7. using namespace std;
    8. #define int long long
    9. inline int gi(){
    10. char tmp=getchar();int ans=0;
    11. while(tmp<'0' || tmp>'9') tmp=getchar();
    12. while(tmp<='9' && tmp>='0'){
    13. ans=ans*10+tmp-'0';
    14. tmp=getchar();
    15. }
    16. return ans;
    17. }
    18. const int N = 257;
    19. int Mod;
    20. int F[N][N],F1[N][N],F2[N][N];
    21. struct Num{
    22. int maxx,state,n;
    23. }A[502];
    24. bool cmp(Num a,Num b){
    25. return a.maxx<b.maxx;
    26. }
    27. int P[1200],cnt=-1;
    28. inline void Solve(int pos){
    29. A[pos].n=pos;
    30. for(int i=0;i<8;++i)
    31. if(pos % P[i] == 0)
    32. A[pos].state+=(1<<i);
    33. for(int i=8;i<=cnt;++i){
    34. if(pos % P[i]==0){
    35. A[pos].maxx=P[i];
    36. return;
    37. }
    38. }
    39. }
    40. bool Vis[1002];
    41. inline void Init(){
    42. for(int i=2;i<=510;++i){
    43. if(!Vis[i])
    44. P[++cnt]=i;
    45. else
    46. continue;
    47. for(int j=i;j<=600;j+=i)
    48. Vis[j]=1;
    49. }
    50. }
    51. signed main()
    52. {
    53. int n=gi();Mod=gi();
    54. Init();
    55. for(int i=2;i<=n;++i)
    56. Solve(i);
    57. for(int i=1;i<n;++i)
    58. A[i]=A[i+1];
    59. sort(A+1,A+n,cmp);
    60. F[0][0]=1;
    61. for(int i=1;i<n;++i){
    62. if(A[i].maxx==0 || A[i].maxx != A[i-1].maxx){
    63. memcpy(F1,F,sizeof F);
    64. memcpy(F2,F,sizeof F);
    65. }
    66. for(int j=255;j>=0;--j){
    67. for(int k=255;k>=0;--k){
    68. if(j&k) continue;
    69. if((A[i].state&k)==0)
    70. F1[j|A[i].state][k]+=F1[j][k];
    71. if((A[i].state&j)==0)
    72. F2[j][k|A[i].state]+=F2[j][k];
    73. F2[j][k|A[i].state]%=Mod;
    74. F1[j|A[i].state][k]%=Mod;
    75. }
    76. }
    77. if(i==n-1 || A[i].maxx != A[i+1].maxx || A[i].maxx==0){
    78. for(int j=255;j>=0;--j){
    79. for(int k=255;k>=0;--k){
    80. if(j&k) continue;
    81. F[j][k]=((F1[j][k]+F2[j][k])%Mod-F[j][k]+Mod)%Mod;
    82. }
    83. }
    84. }
    85. }
    86. int ans=0;
    87. for(int i=0;i<=255;++i)
    88. for(int j=0;j<=255;++j)
    89. if((i&j)==0)
    90. ans=(ans+F[i][j])%Mod;
    91. printf("%lld",ans);
    92. return 0;
    93. }