#include <cstdio>
#define VMax 5000005
#define NDiv 2
int in[NDiv+1][VMax+1];
int down[NDiv+1];
int up[NDiv+1];
int f[NDiv+1];
int g[NDiv+1];
int N,D;
void Factz()
{
int i;
for(i = 2; i * i <= D; ++i)
{
if( D%i==0 ) { f[ ++f[0] ] = i; g[ ++g[0] ] = 1; D/=i; }
while( D%i==0 ) { ++g[ g[0] ]; D/=i; }
}
if( D>1 ) { f[ ++f[0] ] = D; g[ ++g[0] ] = 1; }
}
void Precalc()
{
int i,j;
for(i = 1; i <= N; ++i)
for(j = 1; j <= f[0]; ++j)
{
if( i % f[j] == 0 ) in[j][i] = 1 + in[j][i/f[j]];
up[j] += in[j][i];
}
for(i = 1; i <= f[0]; ++i) down[i] = up[i];
}
int main(){
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
int i,j,ans=0,ok=0;
scanf("%d %d",&N,&D);
Factz();
Precalc();
for(i = 1; i < (N+1)/2; ++i)
{
for(j = 1; j <= f[0]; ++j)
down[j] += in[j][i] - in[j][N-i+1];
for(j = 1; j <= f[0]; ++j)
if( up[j]-down[j]<g[j] ) break;
if( j > f[0] ) ++ans;
}
if( N%2==0 )
{
for(j = 1; j <= f[0]; ++j)
down[j] += in[j][i] - in[j][N-i+1];
for(j = 1; j <= f[0]; ++j)
if( up[j]-down[j]<g[j] ) break;
if( j > f[0] ) ok=1;
}
printf("%d\n",2*ans+ok);
return 0;
}