def factorization(n): arr = [] temp = n for i in range(2, int(-(-n**0.5//1))+1): if temp%i==0: cnt=0 while temp%i==0: cnt+=1 temp //= i arr.append([i, cnt]) if temp!=1: arr.append([temp, 1]) if arr==[]: arr.append([n, 1]) return arr def func(x,p): res = 0 li = factorization(p) p = li[-1][0] y = p while x//y != 0: res += x//y y*=p return res MOD = 10**9+7 N,P = map(int,input().split()) tmp = 1 for i in range(2,N+1): tmp = (tmp*i)%MOD print(func(N,P)*pow(tmp,tmp,MOD)%MOD)