const int maxn=20;
int a[maxn],b[maxn],n,k;
void dfs(int x){
if(x>k){//边界条件
for(int i=1;i<=k;i++) printf("%d ",a[i]);
printf("\n");
return ;
}
for(int i=a[x-1]+1;i<=n;i++){//从n个自然数中挑选
if(b[i]){//b[i]=1,说明可以并入结果数组a
a[x]=i; b[i]=0;//被取出
dfs(x+1);//进入下一层
b[i]=1;//回溯
}
}
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) b[i]=1;
a[0]=0;
dfs(1);
return 0;
}