#include <iostream>
using namespace std;

long long power(long long x, long long k, long long mod){
  long long ret = 1;
  while(k > 0){
    if(k&1) ret *= x, ret %= mod;
    x *= x, x %= mod;
    k >>= 1;
  }
  return ret;
}


int main(){
  long long N, M;
  cin >> N  >> M;
  long long ans = power(10,N,M*M);
  ans /= M;
  cout << ans << endl;
}

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
#define G getchar()
int read()
{
	int x=0; bool flg=false; char ch=G;
	for (;!isdigit(ch);ch=G) if (ch=='-') flg=true;
	for (;isdigit(ch);ch=G) x=(x<<3)+(x<<1)+(ch^48);
	return flg?-x:x;
}
#undef G
#define fi first
#define se second
typedef long long ll;
const int mod=998244353;
inline int upd(const int &x){return x+(x>>31&mod);}
inline void add(int &x,int y){x=upd(x+y-mod);}
inline void iadd(int &x,int y){x=upd(x-y);}
int qpow(int x,int y){
	int res=1;
	for (;y;y>>=1,x=1LL*x*x%mod)
		if (y&1) res=1LL*res*x%mod;
	return res;
}
#define rep(i,l,r) for (int i(l);i<=r;i++)
#define per(i,l,r) for (int i(r);i>=l;i--)

ll n; int m;
struct C{
	int x,y,z;
};
C f[2][10010]; bool e=0;
void trans(){
	e^=1;
//	rep(i,0,m-1) f[e][i]=(C){0,0,0};
	rep(i,0,m-1){
		C &g=f[e^1][i],&h=f[e^1][g.z],&o=f[e][i];
		o.x=g.x*h.x%m,o.y=(g.y*h.x+h.y)%m,o.z=h.z;
	}
}
void solve(){
	scanf("%lld%d",&n,&m);
	rep(i,0,m-1){
		f[e][i]=(C){10%m,(i*10)/m,i*10%m};
	}
	int a=0,b=1;
	for (ll k=n;k;k>>=1,trans())
		if (k&1){
			C &t=f[e][b];
			a=(a*t.x+t.y)%m,b=t.z;
		}
	printf("%d\n",a);
}
int main()
{
	for (int T=1;T--;) solve();
}
