捞
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
typedef long long ll;
struct ask
{
ll a,b;
}que[maxn];
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b)
{
x=1;y=0;
return a;
}
ll d=exgcd(b,a%b,x,y);
ll t=x;
x=y;
y=t-(a/b)*y;
return d;
}
ll inv(ll a,ll p)
{
ll x,y;
exgcd(a,p,x,y);
return (x%p+p)%p;
}
ll gcd(ll a,ll b)
{
if(a<b)
swap(a,b);
return ((a%b==0)?b:gcd(b,a%b));
}
ll lcm(ll a,ll b)
{
return a/gcd(a,b)*b;
}
ll exCRT(ll n)
{
queue<ask> q;
while(q.size()>1)
{
ll a1=q.front().a,b1=q.front().b;
q.pop();
ll a2=q.front().a,b2=q.front().b;
q.pop();
ll a=a1,b=a2,x,y;
ll d=exgcd(a,b,x,y);
ll t=a2/d;
ll c=b2-b1;
x=(x*c/d%t+t)%t;
ll kp=a1*x+b1,kq=lcm(a1,a2);
kp=(kp%kq+kq)%kq;
q.push(ask{kq,kp});
}
return q.front().b%q.front().a;
}
ll qpow(ll x,ll p,ll mod)
{
ll ans=1;
while(p)
{
if(p&1)
ans=(ans%mod*x%mod)%mod;
x=(x%mod*x%mod)%mod;
p>>=1;
}
return ans;
}
ll qqpow(ll x,ll p)
{
ll ans=1;
while(p)
{
if(p&1)
ans=(ans*x);
x=(x*x);
p>>=1;
}
return ans;
}
ll qmul(ll x,ll p,ll mod)
{
ll ans=1;
while(p)
{
if(p&1)
ans=(ans%mod+x%mod)%mod;
x=(x%mod+x%mod)%mod;
p>>=1;
}
return ans;
}
ll timex(ll n,ll mod)
{
return ((n<mod)?0:timex(n/mod,mod)+(n/mod,mod));
}
ll qfac(ll n,ll q,ll k,ll mod)
{
if(n==0||n==1)
return 1%mod;
if(n==2)
return 2%mod;
ll ans=1;
for(int i=2;i<=mod;i++)
{
if(i%q!=0)
ans=qmul(ans,i,mod)%mod;
}
ans=qpow(ans,n/mod,mod);
for(int i=2;i<=n%mod;i++)
{
if(i%q!=0)
ans=qmul(ans,i,mod)%mod;
}
ans=qmul(ans%mod,qfac(n,q,k,mod)%mod,mod)%mod;
return ans%mod;
}
ll exC(ll n,ll m,ll pi,ll pk)
{
ll mod=pi*pk;
ll a=qfac(n,pi,pk,mod),b=qfac(m,pi,pk,mod),c=qfac(n-m,pi,pk,mod);
ll px=timex(n,pi)-timex(m,pi)-timex(n-m,pi);
return a%mod*inv(b,mod)%mod*inv(c,mod)%mod*qpow(pi,px,mod)%mod;
}
ll exLucas(ll n,ll m,ll mod)
{
ll ans=0,tmp=mod,sq=sqrt(mod),tot=0;
for(int i=2;i<=sq;i++)
{
if(tmp%i==0)
{
ll p=i,k=0;
while(tmp%i==0)
tmp/=i,k++;
que[++tot].a=qqpow(p,k),que[tot].b=exC(n,m,p,k);
}
}
if(tmp>1)
que[++tot].a=qqpow(tmp,1),que[tot].b=exC(n,m,tmp,1);
return exCRT(tot)%mod;
}
int main()
{
ios::sync_with_stdio(false);
ll n,m,mod;
cin>>n>>m>>mod;
cout<<exLucas(n,m,mod)<<endl;
return 0;
}