#include<cstdio>
#include<stack>
#include<iostream>
#include<queue>
#include<algorithm>
#include<iterator>
#include<set>
#include<string>
#include<cstring>
#include<map>
#include<vector>
using namespace std;
typedef long long ll;
int a,m;
long long b=0;
ll fastpow(ll a,ll pow,ll mod){
long long base=a;
long long ans=1;
while(pow){
if(pow&1){
ans=(ans*base)%mod;
}
base=(base*base)%mod;
pow>>=1;
}
return ans;
}
int phi=1;
bool flag=false;
char c;
int main(){
scanf("%d%d",&a,&m);
a%=m;
int mm=m;
for(int i=2;i*i<=mm;++i) {
if(mm%i) continue;
phi*=i-1;
mm/=i;
while(mm%i==0)
phi*=i,
mm/=i;
}
if (mm > 1) phi *= mm - 1;
while ( ( c = getchar() ) < '0' || c > '9') ;
while (b = b * 10 + (c - '0'), (c = getchar()) >= '0' && c <= '9')
if (b >= phi) flag = 1, b %= phi;
if (b >= phi) flag = 1, b %= phi;
if (flag) b += phi;
printf("%d",fastpow(a,b,m));
return 0;
}