N,P = map(int,input().split()) MOD = 10**9+7 MAXN = 10**5 + 15 sieve = [i for i in range(MAXN+1)] p = 2 while p*p <= MAXN: if sieve[p] == p: for q in range(2*p,MAXN+1,p): if sieve[q] == q: sieve[q] = p p += 1 def is_prime(n): return sieve[n] == n from collections import Counter fc = Counter() f = 1 for n in range(2,N+1): m = n while sieve[m] > 1: fc[sieve[m]] += 1 f *= sieve[m] f %= MOD m //= sieve[m] #xc = Counter() x = 1 for k,v in fc.items(): #xc[k] = v*f%MOD x *= pow(k,v*f,MOD) x %= MOD ans = fc[P] * x % MOD print(ans)