typedef long long LL;
LL fun(LL x,LL n,)
{
LL res=1;
while(n>0)
{
if(n & 1) //&位操作
res=(res*x)%Max;
x=(x*x)%Max;
n >>= 1;
}
return res;
} //
#include<stdio.h>
#define M 1000000007
int fp(int a,int b){
long long ret=1,pow=a;//ret:返回值;pow:基底
while(b!=0){
if(b&1) ret=(ret*pow)%M;
pow=(pow*pow)%M;
b/=2;//相当于b>>1
}
return (int)ret;
}
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",fp(a,b));
}
LL fun(LL x,LL n,)
{
LL res=1;
while(n>0)
{
if(n & 1) //&位操作
res=(res*x)%Max;
x=(x*x)%Max;
n >>= 1;
}
return res;
} //
#include<stdio.h>
#define M 1000000007
int fp(int a,int b){
long long ret=1,pow=a;//ret:返回值;pow:基底
while(b!=0){
if(b&1) ret=(ret*pow)%M;
pow=(pow*pow)%M;
b/=2;//相当于b>>1
}
return (int)ret;
}
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",fp(a,b));
}