#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2;
int n,p;
ll m;
struct sqare{
ll sq[N + 2][N + 2];
}f,ans;
void dj(sqare&x)
{
for(int i =1;i <=N;i++)
{
for(int j = 1;j <=N;j++)
{
if(i ==j)
{
x.sq[i][j] = 1LL;
}
else
{
x.sq[i][j] = 0LL;
}
}
}
}
void jc(sqare&x,sqare&y,sqare&z)
{
memset(z.sq,0,sizeof(z.sq));
for(int i =1;i <=N;i++)
{
for(int j = 1;j <=N;j++)
{
if(x.sq[i][j])
{
for(int k = 1; k <= N;k++)
{
z.sq[i][k] += x.sq[i][j]*y.sq[j][k];
if(z.sq[i][k] >= m)
{
z.sq[i][k] %=m;
}
}
}
}
}
}
void qp(int k)
{
dj(ans);
sqare tmp = f,t;
while(k)
{
if(k%2==1)
{
jc(ans,tmp,t);
ans = t;
}
jc(tmp,tmp,t);
tmp = t;
k /= 2;
}
}
ll slove()
{
if(n <= 2)
{
return 1LL;
}
qp(n - 2);
ll ret = ans.sq[1][1] + ans.sq[2][1];
if(ret >= m)
{
ret -=m;
}
return ret;
}
int main()
{
cin >> n >> p;
m = p;
f.sq[1][1] = 1;
f.sq[1][2] = 1;
f.sq[2][1] = 1;
f.sq[2][2] = 0;
int ans2 = (int)slove();
cout << ans2;
return 0;
}