#include<stdio.h>
#include<math.h>
int d[29],d_1[29],d_2[29],arr[29],n,r;
int l=1;
void A(int x)
{
arr[x]=d[x]-(d_1[x]+d_2[x]);
if(x<30){A(x+1);}
return;
}
void B(int x)
{
l*=pow(x,arr[x]);
if(x<30){B(x+1);}
return;
}
int main()
{
scanf("%d %d",&n,&r);
F_d(n);
F_d_1(r);
F_d_2(n-r);
A(2);
B(2);
printf("%d",l);
}
void P_d(int x,int y)
{
if(x%y==0){d[x]++;P_d(x/y,y);}
else {P_d(x,y+1);}
return;
}
void F_d(int x)
{
P_d(x,2);
if(x!=1){F_d(x-1);}
return;
}
void P_d_1(int x,int y)
{
if(x%y==0){d_1[x]++;P_d_1(x/y,y);}
else {P_d_1(x,y+1);}
return;
}
void F_d_1(int x)
{
P_d_1(x,2);
if(x!=1){F_d_1(x-1);}
return;
}
void P_d_2(int x,int y)
{
if(x%y==0){d_2[x]++;P_d_2(x/y,y);}
else {P_d_2(x,y+1);}
return;
}
void F_d_2(int x)
{
P_d_2(x,2);
if(x!=1){F_d_2(x-1);}
return;
}