#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 129402307; ll _MOD = 129402306; double EPS = 1e-10; int pow_mod(ll x, ll n, int m) { if (x == 0) return 0; ll res = 1; for (; n > 0; n >>= 1) { if (n & 1) res = (res * x) % m; x = (x * x) % m; } return res; } int main() { string N, M; cin >> N >> M; if (N == "0") { cout << 0 << endl; return 0; } if (M == "0") { cout << 1 << endl; return 0; } int n = 0; for (int i = 0; i < N.length(); i++) n = (n * 10 + N[i] - '0') % MOD; int m = 0; for (int i = 0; i < M.length(); i++) m = (m * 10 + M[i] - '0') % _MOD; cout << pow_mod(n, m, MOD) << endl; }