/*
古代猪文:Lucas定理+中国剩余定理
999911658=2*3*4679*35617
Lucas定理:(m,n)=(sp,tp)(r,q) %p
中国剩余定理:x=sum{si*Mi*ti}+km
先求出sum{C(d,n)}%p[i]=a[i]
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 999911659
#define maxn 100005
ll m[4]={2,3,4679,35617};
ll f[4][maxn],a[4],d[maxn];
ll exgcd(ll a,ll b,ll &x,ll &y){
if(b==0){x=1,y=0;return a;}
ll d=exgcd(b,a%b,x,y);
ll z=x;x=y,y=z-a/b*y;
return d;
}
ll inv(ll a,ll Mod){
ll x,y;
exgcd(a,Mod,x,y);
return (x+Mod)%Mod;
}
ll C(int i,ll n,ll k,ll p){return f[i][n]*inv(f[i][k]*f[i][n-k]%p,p)%p;}
ll lucas(int i,ll n,ll k,ll p){
int res=1;
while(n&&k){
res=res*C(i,n%p,k%p,p)%p;
if(res==0)return 0;
n/=p,k/=p;
}
return res;
}
ll Pow(ll x,ll n,ll Mod){
ll res=1;
while(n){
if(n%2)res=res*x%Mod;
n>>=1;x=x*x%Mod;
}
return res;
}
ll china(int n,ll a[],ll m[]){
ll M=1,res=0;
for(int i=0;i<n;i++)M*=m[i];
for(int i=0;i<n;i++){
ll w=M/m[i],x,y;
exgcd(w,m[i],x,y);
res=(res+x*w*a[i])%M;
}
return (res+M)%M;
}
int main(){
ll n,g;
cin>>n>>g;
if(g==mod){puts("0");return 0;}
int tot=0;
for(int i=1;i*i<=n;i++)
if(n%i==0){//求n的所有质因子
if(i*i==n)d[tot++]=i;
else d[tot++]=i,d[tot++]=n/i;
}
for(int i=0;i<4;i++){
f[i][0]=1;
for(int j=1;j<m[i];j++)
f[i][j]=f[i][j-1]*j%m[i];
}
for(int i=0;i<tot;i++)
for(int j=0;j<4;j++)
a[j]=(a[j]+lucas(j,n,d[i],m[j]))%m[j];;
ll ans=china(4,a,m);
cout<<Pow(g,ans,mod);
}