For given integers m and n, compute mn (mod 1,000,000,007). Here, A (mod M) is the remainder when A is divided by M.

Constraints

* 1 ≤ m ≤ 100
* 1 ≤ n ≤ 109

Input


m n


Two integers m and n are given in a line.

Output

Print mn (mod 1,000,000,007) in a line.

Examples

Input

2 3


Output

8


Input

5 8


Output

390625
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

// mod * mod が long long に収まらない場合，
// 足し算でオーバーフローを避けてO(log b)で計算する
LL mul_mod(LL a, LL b, LL mod){
    if(b == 0) return 0;
    LL res = mul_mod((a + a) % mod, b / 2, mod);
    if(b & 1) res = (res + a) % mod;
    return res;
}

// aのb乗をO(log b)で計算する
LL pow_mod(LL a, LL b, LL mod){
    if(b == 0) return 1;
    LL res = pow_mod(a * a % mod, b / 2, mod);
    if(b & 1) res = res * a % mod;
    return res;
}

// a * b % mod == 1 をみたすbを計算する．
// modが素数のときは b = a ^ (m - 2)でも計算できる
LL inv_mod(LL a, LL mod){
    LL x, y;
    extgcd(a, mod, x, y);
    return (x % mod + mod) % mod;
}

// 素数pを法とする，1..nの逆元のリストを求める O(n)
vector<LL> inverse_list(int n, int p){
    vector<LL> inv(n + 1);
    inv[1] = 1;
    for (int i = 2; i <= n; ++i){
        inv[i] = inv[p % i] * (p - p / i) % p;
    }
    return inv;
}
int main(){
LL a, b;
cin >> a >> b;
cout << pow_mod(a, b, 1000000007) << endl;
}