#include <bits/stdc++.h>
using namespace std;
long long n , m , x = 10;
struct f
{
long long a[11][11];
inline void print ()
{
for (int i = 1; i <= 3; i++ , cout << "\n")
for (int j = 1; j <= 3; j++)
cout << a[i][j] << " ";
}
};
f operator * (const f &l , const f &b)
{
f c;
for (long long i = 1; i <= 3; i++)
for (long long j = 1; j <= 3; j++)
c.a[i][j] = 0;
for (long long i = 1; i <= 3; i++)
for (long long j = 1; j <= 3; j++)
for (long long k = 1; k <= 3; k++)
c.a[i][j] = (c.a[i][j] + l.a[i][k] % m * b.a[k][j] % m) % m;
return c;
}
f ksm (f a , long long k)
{
f ans;
for (long long i = 1; i <= 3; i++)
for (long long j = 1; j <= 3; j++)
ans.a[i][j] = 1;
while (k)
{
if (k & 1) ans = ans * a;
k >>= 1;
a = a * a;
}
return ans;
}
f a , z;
inline void PNN (long long l)
{
a.a[1][1] = x % m , a.a[1][2] = a.a[1][3] = a.a[2][2] = a.a[2][3] = a.a[3][3] = 1;
a = ksm (a , l);
z = z * a;
}
long long ans = 0;
signed main ()
{
cin >> n >> m;
for (int i = 1; i <= 3; i++)
for (int j = 1; j <= 3; j++)
z.a[i][j] = 1 , a.a[i][j] = 0;
while (x <= n)
{
PNN (x - x / 10);
x *= 10;
}
PNN (n - x + 1);
ans = z.a[1][3];
cout << ans << endl;
return 0;
}