#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define inf 0x3f3f3f
#define re register
#define maxn 100000
int n,m;
inline int read(){
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9') {if(ch=='-')f=-1; ch=getchar();}
while (ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0'; ch=getchar();}
return x*f;
}
struct bigint
{
int num[100];
int len;
bigint()
{
memset(num,0,sizeof(num));
len=1;
}
//
// int &operator [] (int i)
// {
// return num[i];// x[i] ----> x.num[i]
// }
void flat(int l)
{
len=l;
for(re int i=1;i<l;i++)
num[i+1] += num[i] / 10,num[i]%=10;
for(;!num[len]&&len>1;) len--;
}
void print()
{
for(int i=max(1,len);i>=1;i--)
cout<<num[i];
}
}dp[110][110];
bigint operator+(bigint a,bigint b)
{
bigint c;
int len=max(a.len,b.len);
for(re int i=1;i<=len;i++)
c.num[i] += a.num[i] + b.num[i];
c.flat(len+1);
return c;
}
bigint operator*(bigint a,int b)
{
bigint c;
int len=a.len;
for(int i=1;i<=len;i++)
c.num[i] = a.num[i]*b;
c.flat(len+12);
return c;
}
signed main()
{
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
// printf("%dM\n",(sizeof(dp) >> 20));
dp[0][0].num[1]=1;
for(re int i=1;i<=100;i++)
dp[i][1].num[1]=dp[i][i].num[1]=1;
for(re int i=1;i<=103;i++)
for(re int j=1;j<=103;j++)
{
if(i<j) continue;
dp[i][j] = dp[i-1][j-1]+dp[i-1][j]*j;
}
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==m||m==1)
{
cout<<1<<'\n';
continue;
}
if(n<m)
{
cout<<0<<'\n';
continue;
}
dp[n][m].print();
cout<<'\n';
}
return 0;
}