from collections import defaultdict class get_prime(): def __init__(self): self.rev = [] def prime(self,n): if n == 1: return self.rev for i in range(2,int(n**0.5)+1): if n % i == 0: self.rev.append(i) self.prime(int(n/i)) break else: self.rev.append(n) return self.rev def acum(List):#累積和 rev = [0 for _ in range(len(List))] for i in reversed(range(len(List))): if i == len(List)-1: rev[i] = List[i] else: rev[i] = rev[i+1] + List[i] rev[i] %= mod return rev N,M = map(int,input().split()) cnt = defaultdict(int) gp = get_prime() ps = gp.prime(M) mod = 10 ** 9 + 7 ans = 1 for p in ps: cnt[p] += 1 for key in cnt.keys(): m = cnt[key] dp = [1] * (m+1) for i in range(1,N): nx = [0] * (m+1) for p in range(m+1): nx[m-p] += dp[p] dp = acum(nx) tmp = 0 for p in range(m+1): tmp += dp[p] tmp %= mod ans *= tmp ans %= mod print(ans)