M = 10**9+7 N, P = map(int, input().split()) # N! は P で何回割り切れるか? # N! = P**K * Q の K を求める K = 0 for i in range(1, N + 1): while i%P == 0: i //= P K += 1 # K*(N!)**(N!) を求めたい # 指数部分を軽量化する # a**(s*(M - 1) + r) ≡ a**r (mod M) から # 指数部分は N! を M - 1 で割ったあまりにしてもよい shisu = 1 for i in range(1, N + 1): shisu *= i shisu %= M - 1 # 底を軽量化する tei = 1 for i in range(1, N + 1): tei *= i tei %= M ans = K * pow(tei, shisu, M) ans %= M print(ans)