import sys sys.setrecursionlimit(10000) def totient(n): if n == 0: return 0 res = n i = 2 while i * i <= n: if n % i == 0: while n % i == 0: n //= i res -= res // i i += 1 if n > 1: res -= res // n return res def is_ge(a, n, x): if x == 0: return True if n == 0: return 1 >= x if n == 1: return a >= x if a == 1: return 1 >= x import math if x == 1: return True try: log_val = math.log(x) / math.log(a) except: return False required = math.ceil(log_val) return is_ge(a, n-1, required) memo = {} def mod_tet(a, n, m): key = (a, n, m) if key in memo: return memo[key] if m == 1: memo[key] = 0 return 0 if n == 0: res = 1 % m memo[key] = res return res if a == 1: res = 1 % m memo[key] = res return res if n == 1: res = a % m memo[key] = res return res phi_m = totient(m) e_mod = mod_tet(a, n-1, phi_m) e_ge = is_ge(a, n-1, phi_m) if e_ge: exponent = e_mod + phi_m else: exponent = e_mod res = pow(a, exponent, m) memo[key] = res return res def main(): A, N, M = map(int, sys.stdin.readline().split()) if M == 1: print(0) return if N == 0: print(1 % M) return if A == 1: print(1 % M) return print(mod_tet(A, N, M)) if __name__ == '__main__': main()