from sys import stdin import bisect from collections import deque N,P = map(int,stdin.readline().split()) mod = 10**9+7 x = 1 for i in range(1,N+1): x *= i x %= mod-1 y = 1 for i in range(1,N+1): y *= i y %= mod z = 0 for i in range(1,40): if P**i > N: break z += N // (P**i) ans = z * pow( y,x,mod ) % mod print (ans)