from collections import Counter def prime_factorize(n): a = [] while n % 2 == 0: a.append(2) n //= 2 f = 3 while f * f <= n: while n % f == 0: a.append(f) n //= f else: f += 2 if n != 1: a.append(n) return a MOD = 10 ** 9 + 7 n, m = map(int, input().split()) pr = Counter(prime_factorize(m)) res = 1 for x in pr.values(): mat = [[0] * (x + 1) for _ in range(x + 1)] ans = [[0] * (x + 1) for _ in range(x + 1)] for i in range(x + 1): ans[i][i] = 1 for j in range(x + 1 - i): mat[i][j] = 1 tk = n + 1 while tk > 0: if tk & 1: t = [[0] * (x + 1) for _ in range(x + 1)] for i in range(x + 1): for j in range(x + 1): for k in range(x + 1): t[i][j] += mat[i][k] * ans[k][j] % MOD for i in range(x + 1): ans[i] = t[i][:] t = [[0] * (x + 1) for _ in range(x + 1)] for i in range(x + 1): for j in range(x + 1): for k in range(x + 1): t[i][j] += mat[i][k] * mat[k][j] % MOD for i in range(x + 1): mat[i] = t[i][:] tk >>= 1 res *= ans[0][0] print(res % MOD)