#include <bits/stdc++.h>
using namespace std;

#include <atcoder/modint>
using mint = atcoder::modint1000000007;

#define rep(i, x) for(int i = 0; i < (x); i++)
using ll = long long;

mint res = 1;

int main() {
	int n;
	ll m;
	cin >> n >> m;
	int lim = sqrt(m);
	for(int i = 2; i <= lim; i++) {
		int c = 0;
		while(m % i == 0) m /= i, c++;
		if(c) {
			vector dp(n + 1, vector(c + 1, mint(0)));
			dp[0][0] = 1;
			for(int i = 0; i < n; i++) {
				mint cum = 0;
				for(int j = c; j >= 0; j--) {
					cum += dp[i][c - j];
					dp[i + 1][j] = cum;
				}
			}
			res *= accumulate(dp.back().begin(), dp.back().end(), mint(0));
		}
	}
	if(m > 1) {
		int c = 1;
		vector dp(n + 1, vector(c + 1, mint(0)));
		dp[0][0] = 1;
		for(int i = 0; i < n; i++) {
			mint cum = 0;
			for(int j = c; j >= 0; j--) {
				cum += dp[i][c - j];
				dp[i + 1][j] = cum;
			}
		}
		res *= accumulate(dp.back().begin(), dp.back().end(), mint(0));
	}
	cout << res.val() << endl;
}