#include<bits/stdc++.h>
using namespace std;
long long m,n;
long long ans[5][5],A[5][5],t[5][5];
long long z[20];
void qsm(long long x)
{
while(x)
{
if(x%2==1)
{
memset(t,0,sizeof(t));
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
for(int k=1;k<=3;k++)
t[i][j]=(t[i][j]+A[i][k]*ans[k][j]%m)%m;
memcpy(ans,t,sizeof(ans));
}
memset(t,0,sizeof(t));
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
for(int k=1;k<=3;k++)
t[i][j]=(t[i][j]+A[i][k]*A[k][j]%m)%m;
memcpy(A,t,sizeof(A));
x/=2;
}
}
int main()
{
scanf("%lld%lld",&n,&m);
z[0]=1;
for(int i=1;i<=18;i++) z[i]=z[i-1]*10;
A[1][2] = A[1][3] = A[2][2] = A[2][3] = A[3][3] = 1;
ans[1][1] = ans[2][1] = ans[3][1] = 1;
for(int i=0;i<=17;i++)
{
if(n>=z[i]&&n<=z[i+1])
{
A[1][1] = z[i+1];
if(i==0) qsm(n-1);
else qsm(n-z[i]+1);
break;
}
else
{
A[1][1] = z[i+1];
if(i==0) qsm(8);
else qsm(z[i+1]-z[i]);
}
}
printf("%lld",ans[1][1]);
return 0;
}