#include <iostream>
#include <queue>
#include <utility>
#include <math.h>
using namespace std;
typedef long long int ll;
ll nperiodic[150001];
ll func(ll n, ll m)
{
ll temp = 0, temp1;
if (nperiodic[n] != -1)
return nperiodic[n];
if (n == 1)
{
nperiodic[1] = 2%m;
return nperiodic[1];
}
if (n == 2)
{
nperiodic[2] = 2%m;
return nperiodic[2];
}
queue<ll> q;
for (int i = 2; i <= sqrt(n); i++)
{
if (n % i == 0)
{
q.push(i);
if (n/i != i)
q.push(n/i);
}
}
q.push(1);
while (!q.empty())
{
temp1 = q.front();
q.pop();
if (nperiodic[temp1] == -1)
temp += func(temp1, m);
else
temp += nperiodic[temp1];
temp = temp % m;
}
temp1 = 1;
for (int i = 0; i < n; i++)
{
temp1 = temp1 * 2;
temp1 = temp1 % m;
}
if (temp1 < temp)
{
temp1 = m - temp + temp1;
}
else
temp1 -= temp;
nperiodic[n] = temp1;
return nperiodic[n];
}
int main()
{
ll n, m;
cin>>n>>m;
for (int i = 1; i <= n; i++)
nperiodic[i] = -1;
for (int i = 1; i <= sqrt(n); i++)
func(i, m);
func(n, m);
cout<<nperiodic[n]<<endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8bWF0aC5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgbGw7CmxsIG5wZXJpb2RpY1sxNTAwMDFdOwpsbCBmdW5jKGxsIG4sIGxsIG0pCnsKICAgIGxsIHRlbXAgPSAwLCB0ZW1wMTsKICAgIGlmIChucGVyaW9kaWNbbl0gIT0gLTEpCiAgICAgICAgcmV0dXJuIG5wZXJpb2RpY1tuXTsKICAgIGlmIChuID09IDEpCiAgICB7CiAgICAgICAgbnBlcmlvZGljWzFdID0gMiVtOwogICAgICAgIHJldHVybiBucGVyaW9kaWNbMV07CiAgICB9CiAgICBpZiAobiA9PSAyKQogICAgewogICAgICAgIG5wZXJpb2RpY1syXSA9IDIlbTsKICAgICAgICByZXR1cm4gbnBlcmlvZGljWzJdOwogICAgfQogICAgcXVldWU8bGw+IHE7CiAgICBmb3IgKGludCBpID0gMjsgaSA8PSBzcXJ0KG4pOyBpKyspCiAgICB7CiAgICAgICAgaWYgKG4gJSBpID09IDApCiAgICAgICAgewogICAgICAgICAgICBxLnB1c2goaSk7CiAgICAgICAgICAgIGlmIChuL2kgIT0gaSkKICAgICAgICAgICAgICAgIHEucHVzaChuL2kpOwogICAgICAgIH0KICAgIH0KICAgIHEucHVzaCgxKTsKICAgIHdoaWxlICghcS5lbXB0eSgpKQogICAgewogICAgICAgIHRlbXAxID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgaWYgKG5wZXJpb2RpY1t0ZW1wMV0gPT0gLTEpCiAgICAgICAgICAgIHRlbXAgKz0gZnVuYyh0ZW1wMSwgbSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB0ZW1wICs9IG5wZXJpb2RpY1t0ZW1wMV07CiAgICAgICAgdGVtcCA9IHRlbXAgJSBtOwogICAgfQogICAgdGVtcDEgPSAxOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgdGVtcDEgPSB0ZW1wMSAqIDI7CiAgICAgICAgdGVtcDEgPSB0ZW1wMSAlIG07CiAgICB9CiAgICBpZiAodGVtcDEgPCB0ZW1wKQogICAgewogICAgICAgIHRlbXAxID0gbSAtIHRlbXAgKyB0ZW1wMTsKICAgIH0KICAgIGVsc2UKICAgICAgICB0ZW1wMSAtPSB0ZW1wOwogICAgbnBlcmlvZGljW25dID0gdGVtcDE7CiAgICByZXR1cm4gbnBlcmlvZGljW25dOwp9CmludCBtYWluKCkKewogICAgbGwgbiwgbTsKICAgIGNpbj4+bj4+bTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICBucGVyaW9kaWNbaV0gPSAtMTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHNxcnQobik7IGkrKykKICAgICAgICBmdW5jKGksIG0pOwogICAgZnVuYyhuLCBtKTsKICAgIGNvdXQ8PG5wZXJpb2RpY1tuXTw8ZW5kbDsKfQo=