#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
struct gx{
int len;
short y[201];
}g[101];
gx cheng(gx t,int s){
int i,k;
for( i=1;i<=t.len;i++)t.y[i]*=s;
for(i=1;i<=t.len;i++){
t.y[i+1]+= t.y[i]/10;
t.y[i]%=10;
}
k=t.len+1;
while(t.y[k]>10){
t.y[k+1]+=t.y[k]/10;
t.y[k]%=10;
k++;
};
while(t.y[k]==0)k--;
t.len=k;
return t;
}
gx jia(gx a,gx b){//高精度数a+b
int i,j,k; gx c;
c.len=0;
memset(&c,0,sizeof(struct gx));
k=(a.len>b.len)?a.len:b.len;
for(i=1;i<=k;i++){
c.y[i]+=a.y[i]+b.y[i];
if (c.y[i]>=10){
c.y[i+1]+=(c.y[i]/10);
c.y[i]%=10;
}
}
k++;
while( c.y[k]==0)k--;
c.len=k;
return c;
}
int main()
{
freopen("p1088.in","r",stdin);
freopen("p1088.out","w",stdout);
int n,m;
int i,j;
while(!feof(stdin)){
n=0;m=0;
cin >> n >> m;
if(m==0&&n==0)break;
if(n<m){
cout<<0<<endl;
continue;
}
memset(&g,0,sizeof(struct gx)*101);
g[1].len=1;g[1].y[1]=1;//
for(i=1;i<=n;i++)
{
for(j=m;j>=1;j--)
{
if (i<j)
{
memset(&g[j],0,sizeof(struct gx));
continue;
}
g[j]=jia(cheng(g[j],j),g[j-1]);
}
}
for(i=g[m].len;i>=1;i--)cout<<g[m].y[i];
cout<<endl;
}
fclose(stdin);
fclose(stdout);
return 0;
}
( )