//Ilie Dumitru
#include<cstdio>
typedef long long ll;
int cnt(int a, int x)
{
int s=0;
while(a/=x)
s+=a;
return s;
}
int factCnt(int a, int x)
{
int s=0;
while(!(a%x))
++s, a/=x;
return s;
}
int cntR[2], a[2], b[2];
int main()
{
FILE *f=fopen("pascal.in", "r"), *g=fopen("pascal.out", "w");
int D, R, i, ans=0;
fscanf(f, "%d%d", &R, &D);
if(!R)
fprintf(g, "0");
else
{
const int stop=(R+1)>>1;
switch(D)
{
case 2:
cntR[0]=cnt(R, 2);
b[0]=cntR[0]-factCnt(R, 2);
for(i=1;i<stop;b[0]-=factCnt(R-i, 2), ++i, a[0]+=factCnt(i, 2))
ans+=(cntR[0]-a[0]-b[0]>0);
ans<<=1;
if(!(R&1))
ans+=(cntR[0]-a[0]-b[0]>0);
break;
case 3:
cntR[0]=cnt(R, 3);
b[0]=cntR[0]-factCnt(R, 3);
for(i=1;i<stop;b[0]-=factCnt(R-i, 3), ++i, a[0]+=factCnt(i, 3))
ans+=(cntR[0]-a[0]-b[0]>0);
ans<<=1;
if(!(R&1))
ans+=(cntR[0]-a[0]-b[0]>0);
break;
case 4:
cntR[0]=cnt(R, 2);
b[0]=cntR[0]-factCnt(R, 2);
for(i=1;i<stop;b[0]-=factCnt(R-i, 2), ++i, a[0]+=factCnt(i, 2))
ans+=(cntR[0]-a[0]-b[0]>1);
ans<<=1;
if(!(R&1))
ans+=(cntR[0]-a[0]-b[0]>1);
break;
case 5:
cntR[0]=cnt(R, 5);
b[0]=cntR[0]-factCnt(R, 5);
for(i=1;i<stop;b[0]-=factCnt(R-i, 5), ++i, a[0]+=factCnt(i, 5))
ans+=(cntR[0]-a[0]-b[0]>0);
ans<<=1;
if(!(R&1))
ans+=(cntR[0]-a[0]-b[0]>0);
break;
case 6:
cntR[0]=cnt(R, 2);
cntR[1]=cnt(R, 3);
b[0]=cntR[0]-factCnt(R, 2);
b[1]=cntR[1]-factCnt(R, 3);
for(i=1;i<stop;b[0]-=factCnt(R-i, 2), b[1]-=factCnt(R-i, 3), ++i, a[0]+=factCnt(i, 2), a[1]+=factCnt(i, 3))
ans+=((cntR[0]-a[0]-b[0]) && (cntR[1]-a[1]-b[1]));
ans<<=1;
if(!(R&1))
ans+=((cntR[0]-a[0]-b[0]) && (cntR[1]-a[1]-b[1]));
}
}
fprintf(g, "%d", ans);
fclose(f);
fclose(g);
return 0;
}