vector<int> add(vector<int> a, vector<int> b){ vector<int> c; int alen = a.size(), blen = b.size(); for(int i = 0, t = 0; i < alen || i < blen || t; i++){ if(i < alen) t += a[i]; if(i < blen) t += b[i]; c.push_back(t % 10); t /= 10; } return c; }
vector<int> mull(vector<int> a, int b, int off){ vector<int> c; int len = a.size(); for(int i = 0, t = 0; i < len || t; i++){ if(i < len) t += a[i] * b; c.push_back(t % 10); t /= 10; } while(off--){ c.insert(c.begin(), 0); } return c; }
vector<int> mul(vector<int> a, vector<int> b){ vector<int> c; c.push_back(0); int len = b.size(); for(int i = 0; i < len; i++){ int k = b[i]; c = add(c, mull(a, k, i)); } return c; }
intmain(){ cin >> n >> m; vector<int> res; res.push_back(1); vector<int> base; while(n){ base.push_back(n % 10); n /= 10; } while(m){ if(m & 1) res = mul(res, base); base = mul(base, base); m >>= 1; } reverse(res.begin(), res.end()); for(auto c: res) cout << c; return0; }