//Problem D
#include<bits/stdc++.h>
using namespace std;
int rd(){
    int a=0;char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))a=(a<<1)+(a<<3)+(ch^48),ch=getchar();
    return a;
}
const int p=1000000007,N=200005;
int n,m,ans=1;
int mul(int a,int b){return (long long)a*b%p;}
int expo(int a,int b){
    int c=1;
    while(b){
        if(b&1)c=mul(a,c);
        b>>=1,a=mul(a,a);
    }
    return c;
}
void C(int a,int b){
    for(int i=1;i<=b;i++)ans=mul(ans,a+i),ans=mul(ans,expo(i,p-2));
}
int main(){
    scanf("%d%d",&n,&m);
    int s=sqrt(m);
    for(int i=2;i<=s;i++)if(m%i==0){
        int c=0;
        while(m%i==0)++c,m/=i;
        C(n-1,c);
    }
    if(m!=1)C(n-1,1);
    printf("%d",ans);
    return 0;
}