mod = 10**9 + 7 def prime_factors(m): factors = {} while m % 2 == 0: factors[2] = factors.get(2, 0) + 1 m //= 2 i = 3 while i * i <= m: while m % i == 0: factors[i] = factors.get(i, 0) + 1 m //= i i += 2 if m > 1: factors[m] = 1 return factors def matrix_mult(a, b, mod): n = len(a) l = len(b) m = len(b[0]) if l > 0 else 0 res = [[0] * m for _ in range(n)] for i in range(n): for k in range(l): aik = a[i][k] if aik == 0: continue for j in range(m): res[i][j] = (res[i][j] + aik * b[k][j]) % mod return res def matrix_pow(mat, power, mod): n = len(mat) res = [[0] * n for _ in range(n)] for i in range(n): res[i][i] = 1 while power > 0: if power % 2 == 1: res = matrix_mult(res, mat, mod) mat = matrix_mult(mat, mat, mod) power //= 2 return res def compute_case_matrix(vp, N, mod): if N == 0: return 0 size = vp + 1 mat = [[0] * size for _ in range(size)] for b in range(size): max_a = vp - b for a in range(size): if a <= max_a: mat[b][a] = 1 if N == 1: total = sum(1 for _ in range(size)) % mod return total mat_pow = matrix_pow(mat, N-1, mod) total = 0 for row in mat_pow: total = (total + sum(row)) % mod return total def main(): import sys input = sys.stdin.read N, M = map(int, input().split()) if M == 1: print(1) return factors = prime_factors(M) result = 1 for p, vp in factors.items(): cnt = compute_case_matrix(vp, N, mod) result = (result * cnt) % mod print(result) if __name__ == '__main__': main()