#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 5e2 + 5;
int dp[maxn][maxn], f[maxn][maxn], g[maxn][maxn];
int p[8] = {2, 3, 5, 7, 11, 13, 17, 19};
array<int, 2> a[maxn];
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, mod; cin >> n >> mod;
for(int i = 1; i <= n - 1; i++){
a[i][0] = -1;
a[i][1] = 0;
int cur = i + 1;
for(int j = 0; j <= 7; j++){
while(cur % p[j] == 0){
cur /= p[j];
a[i][1] |= (1 << j);
}
}
if(cur != 1) a[i][0] = cur;
}
sort(a + 1, a + n);
dp[0][0] = 1;
for(int i = 1; i < n; i++){
if(i == 1 || a[i][0] != a[i - 1][0] || a[i][0] == -1){
for(int j = 0; j <= 255; j++) for(int k = 0; k <= 255; k++) f[j][k] = g[j][k] = dp[j][k];
}
for(int j = 255; j >= 0; j--){
for(int k = 255; k >= 0; k--){
if((j & k) == 0){
if((a[i][1] & j) == 0) (g[j][k | a[i][1]] += g[j][k]) %= mod;
if((a[i][1] & k) == 0) (f[j | a[i][1]][k] += f[j][k]) %= mod;
}
}
}
if(i == n - 1 || a[i][0] != a[i + 1][0] || a[i][0] == -1){
for(int j = 0; j <= 255; j++){
for(int k = 0; k <= 255; k++){
if((j & k) == 0) dp[j][k] = (f[j][k] + g[j][k] - dp[j][k] + mod) % mod;
}
}
}
}
int ans = 0;
for(int j = 0; j <= 255; j++){
for(int k = 0; k <= 255; k++){
if((j & k) == 0){
(ans += dp[j][k]) %= mod;
}
}
}
cout << (ans + mod) % mod;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKI2RlZmluZSBpbnQgbG9uZyBsb25nCiAKY29uc3QgaW50IG1heG4gPSA1ZTIgKyA1OwppbnQgZHBbbWF4bl1bbWF4bl0sIGZbbWF4bl1bbWF4bl0sIGdbbWF4bl1bbWF4bl07CmludCBwWzhdID0gezIsIDMsIDUsIDcsIDExLCAxMywgMTcsIDE5fTsKYXJyYXk8aW50LCAyPiBhW21heG5dOwogCnNpZ25lZCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogCiAgICBpbnQgbiwgbW9kOyBjaW4gPj4gbiA+PiBtb2Q7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG4gLSAxOyBpKyspewogICAgICAgIGFbaV1bMF0gPSAtMTsKICAgICAgICBhW2ldWzFdID0gMDsKICAgICAgICBpbnQgY3VyID0gaSArIDE7IAogICAgICAgIGZvcihpbnQgaiA9IDA7IGogPD0gNzsgaisrKXsKICAgICAgICAgICAgd2hpbGUoY3VyICUgcFtqXSA9PSAwKXsKICAgICAgICAgICAgICAgIGN1ciAvPSBwW2pdOwogICAgICAgICAgICAgICAgYVtpXVsxXSB8PSAoMSA8PCBqKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZihjdXIgIT0gMSkgYVtpXVswXSA9IGN1cjsgCiAgICB9CiAgICBzb3J0KGEgKyAxLCBhICsgbik7CiAKICAgIGRwWzBdWzBdID0gMTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspewogICAgICAgIGlmKGkgPT0gMSB8fCBhW2ldWzBdICE9IGFbaSAtIDFdWzBdIHx8IGFbaV1bMF0gPT0gLTEpewogICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8PSAyNTU7IGorKykgZm9yKGludCBrID0gMDsgayA8PSAyNTU7IGsrKykgZltqXVtrXSA9IGdbal1ba10gPSBkcFtqXVtrXTsKICAgICAgICB9CiAgICAgICAgZm9yKGludCBqID0gMjU1OyBqID49IDA7IGotLSl7CiAgICAgICAgICAgIGZvcihpbnQgayA9IDI1NTsgayA+PSAwOyBrLS0pewogICAgICAgICAgICAgICAgaWYoKGogJiBrKSA9PSAwKXsKICAgICAgICAgICAgICAgICAgICBpZigoYVtpXVsxXSAmIGopID09IDApIChnW2pdW2sgfCBhW2ldWzFdXSArPSBnW2pdW2tdKSAlPSBtb2Q7CiAgICAgICAgICAgICAgICAgICAgaWYoKGFbaV1bMV0gJiBrKSA9PSAwKSAoZltqIHwgYVtpXVsxXV1ba10gKz0gZltqXVtrXSkgJT0gbW9kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKGkgPT0gbiAtIDEgfHwgYVtpXVswXSAhPSBhW2kgKyAxXVswXSB8fCBhW2ldWzBdID09IC0xKXsKICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8PSAyNTU7IGorKyl7CiAgICAgICAgICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDw9IDI1NTsgaysrKXsKICAgICAgICAgICAgICAgICAgICBpZigoaiAmIGspID09IDApIGRwW2pdW2tdID0gKGZbal1ba10gKyBnW2pdW2tdIC0gZHBbal1ba10gKyBtb2QpICUgbW9kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaW50IGFucyA9IDA7CiAgICBmb3IoaW50IGogPSAwOyBqIDw9IDI1NTsgaisrKXsKICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDw9IDI1NTsgaysrKXsKICAgICAgICAgICAgaWYoKGogJiBrKSA9PSAwKXsKICAgICAgICAgICAgICAgIChhbnMgKz0gZHBbal1ba10pICU9IG1vZDsKICAgICAgICAgICAgfQogICAgICAgIH0gCiAgICB9CiAgICBjb3V0IDw8IChhbnMgKyBtb2QpICUgbW9kOwp9Cg==