Exponial

n과 m이 1e9까지 주어질 때 n^(n-1)^(...^1)을 m으로 나눈 나머지를 구한다.

어려움8정수론재귀수학아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

큰 수를 만드는 방법은 여러 가지가 있다. 예를 들면 다음과 같다.

  • 거듭제곱: 422016=42×42××42201642^{2016} = \underbrace{42 \times 42 \times \cdots \times 42}_{2016 \text{개}}
  • 팩토리얼: 2016!=2016×2015××2×12016! = 2016 \times 2015 \times \cdots \times 2 \times 1

이 문제에서는 두 연산을 섞은 exponial을 다룬다. exponial은 모든 양의 정수 nn에 대해 다음과 같이 정의된다.

exponial(n)=n(n1)(n2)21\mathrm{exponial}(n) = n^{(n-1)^{(n-2)^{\cdots^{2^1}}}}

예를 들어 exponial(1)=1\mathrm{exponial}(1) = 1이고, exponial(5)=543216.206×10183230\mathrm{exponial}(5) = 5^{4^{3^{2^1}}} \approx 6.206 \times 10^{183230}이다. 거듭제곱은 오른쪽부터 계산한다. 즉 abc=a(bc)a^{b^c} = a^{(b^c)}이다.

exponial은 값이 너무 커서 그대로 다루기 어렵다. exponial(n)\mathrm{exponial}(n)mm으로 나눈 나머지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 nnmm이 공백을 사이에 두고 주어진다. (1n1091 \le n \le 10^9, 1m1091 \le m \le 10^9)

출력

첫째 줄에 exponial(n)\mathrm{exponial}(n)mm으로 나눈 나머지를 출력한다.