#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MOD=1e9+7;
ll n,m;
inline ll read(){
ll ret=0,iep=1;char ch=getchar();
while (ch<'0' || ch>'9'){if (ch=='-') iep=-1;ch=getchar();}
while (ch>='0' && ch<='9'){ret=ret*10+ch-'0';ch=getchar();}
return ret*iep;
}
inline ll ksm(ll x,ll a){
ll ret=1,k=x;
for (;a;a>>=1,k=k*k%MOD)
if (a&1) ret=ret*k%MOD;
return ret%MOD;
}
int main(){
n=read();m=read();
cout<<ksm(n,m)<<endl;
return 0;
}
快速幂的话就是用来快速求一个数的幂次方。然后这个程序就是把x^a中的a拆成二进制位,然后对于每一个二进制位为1的数都乘上一个值就行了