import std.algorithm; import std.array; import std.conv; import std.math; import std.range; import std.stdio; import std.string; import std.typecons; void scan(T...)(ref T a) { string[] ss = readln.split; foreach (i, t; T) a[i] = ss[i].to!t; } T read(T)() { return readln.chomp.to!T; } T[] reads(T)() { return readln.split.to!(T[]); } alias readint = read!int; alias readints = reads!int; const MOD = 129402307; long modulo(string s, long m) { long x = 0; foreach (d; s.map!(c => c - '0')) { x = (10 * x + d) % m; } return x; } long modPow(long x, long k, long m) { if (k == 0) return 1; if (k % 2 == 0) return modPow(x * x % m, k / 2, m); return x * modPow(x, k - 1, m) % m; } long calc(string s, string t) { long a = modulo(s, MOD); long b = modulo(t, MOD - 1); return modPow(a, b, MOD); } void main() { string s = read!string; string t = read!string; writeln(calc(s, t)); }