#include <bits/stdc++.h>
using namespace std;

#define rep(i,n) for(int i=0;i<(n);i++)

typedef long long ll;

#define REP(i,n) for(ll i=0;i<(ll)(n);i++)
#define REPD(i,n) for(ll i=n-1;i>=0;i--)
#define FOR(i,a,b) for(ll i=a;i<=(ll)(b);i++)
#define FORD(i,a,b) for(ll i=a;i>=(ll)(b);i--)
//定数
#define INF 1000000000 //10^9:極めて大きい値,∞
//略記
#define PB push_back //vectorヘの挿入
#define MP make_pair //pairのコンストラクタ
#define F first //pairの一つ目の要素
#define S second //pairの二つ目の要素
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0;};
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0;};

ll RepeatSquaring(ll N, ll P, ll M){
    if(P==0) return 1;
    if(P%2==0){
        ll t = RepeatSquaring(N, P/2, M);
        return t*t % M;
    }
    return N * RepeatSquaring(N, P-1, M);
}

int main(){
    ios::sync_with_stdio(false); 
    ll n, m;
    cin >> n >> m;
    ll m2=m*m;
    ll ans=1;
    // rep(i, n){
    //     ans*=10;
    //     ans%=m2;
    // }
    ans=RepeatSquaring(10, n, m2);
    ans/=m;
    ans%=m;
    cout << ans << endl;
    return 0;
}
#include<bits/stdc++.h>
using namespace std;

long long ara[2000006],tra[2000006];

int main()
{


        int n,m,a,b,c,d,e,p,q,l,r,s,fr,sc,tr,sz=0,tz,i,j,k,mx=LLONG_MIN,mn=LLONG_MAX;
        int x=0,y=0,cnt=0,res=0,ans=0,sum=0; int flg=0,flag=1,na=0,as=1;
        vector<int>u,v,w; vector< pair<int,int> >vct; vector<string>vst;
        set<int>st,nt,tt; map<int,int>mp,nq,qr; string str,ttr,ntr;

        long long g,h,aa,bb,cc,dd,f;

        scanf("%d %d",&l,&r);  g=r-l+1;  h=g*g;

        for(i=r;i>=1;i--)
        {

            s=0; q=0;

            s=r/i;  q=(l-1)/i;  p=s-q;

            aa=(long long)p;

            f=aa*aa;

            if(i!=1)
            {
                if(i>=l)
                {
                    p=p*2; p--;  x=x+p;
                }
            }

            ara[i]=f-tra[i];


            if(i!=1)
            {

                for(j=1;j*j<=i;j++)
                {
                    if(i%j==0)
                    {
                        fr=j;  sc=i/j;

                        tra[fr]=tra[fr]+ara[i];

                        if(sc!=i && sc!=fr)
                        {
                            tra[sc]=tra[sc]+ara[i];

                        }

                    }

                }

            }


            //cout<<i<<"    "<<ara[i]<<"     "<<p<<"        "<<tra[i]<<endl;
        }

        //cout<<ara[1]<<"   "<<x<<endl;

        h=h-ara[1];  h=h-x;

        printf("%lld\n",h);













   return 0;


}

