#include<cstdio>
#include<cmath>
#define int long long
#define ri register int
#define min(a,b) a<b?a:b
struct matrix{
int val[4][4];
}A,B;
int v[19]={1},p;
inline int read(){
int x=0,f=0;char c=getchar();
while(c>'9'||c<'0') f=c=='-',c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();
return f?-x:x;
}
matrix mul(matrix a,matrix b){
matrix c;
for(ri i=0;i<=3;++i)
for(ri j=0;j<=3;++j)
{
c.val[i][j]=0;if(!i||!j) continue;
for(ri k=1;k<=3;++k)
c.val[i][j]=(c.val[i][j]+a.val[i][k]*b.val[k][j]%p)%p;
}
return c;
}
matrix ksm(matrix B,int b){
matrix E;
for(ri i=1;i<=3;++i) for(ri j=1;j<=3;++j) E.val[i][j]=i==j;
while(b)
{
if(b&1) E=mul(E,B);
B=mul(B,B);
b>>=1;
}
return E;
}
signed main(){
int n=read(),ws=0,n1=n;p=read();
while(n1) ws++,n1/=10;
A.val[1][1]=A.val[1][2]=A.val[1][3]=1;
B.val[2][1]=B.val[2][2]=B.val[3][1]=B.val[3][2]=B.val[3][3]=1;
for(ri i=1;i<=ws;++i) v[i]=v[i-1]*10;
for(ri i=1;i<ws;++i)
{
int l=v[i-1],r=v[i];
B.val[1][1]=v[i]%p;
matrix t=ksm(B,r-l-1);
A=mul(A,t);
}
int l=v[ws-1],r=n;
if(ws!=1) r+=v[ws-2];
B.val[1][1]=v[ws]%p;
matrix t=ksm(B,r-l);
A=mul(A,t);
printf("%lld",A.val[1][1]);
return 0;
}