template<class T>
int DFS_FindNext(T arr[], int nMaxElm, int nDepth)
{
int n = nDepth-1, c = nMaxElm-nDepth;
for (++arr[n]; n>=0 && arr[n]>c+n; ++arr[--n]);
if (n<0) return 0;
for (int t = n+1; t<nDepth; ++t) arr[t] = arr[t-1],++arr[t];
return 1;
};
int main()
{
int n,m;
while(scanf("%d%d",&m,&n)==2)
{
int arr[30], outmap[30];
{for(int t=0;t<m;++t)arr[t]=t,outmap[t]=t+1;}
do
{
for(int t=0; t<n; ++t)
{
printf(" %d", outmap[arr[t]]);
}
putchar('\n');
}while(DFS_FindNext(arr, m, n));
}
return 0;
}
int DFS_FindNext(T arr[], int nMaxElm, int nDepth)
{
int n = nDepth-1, c = nMaxElm-nDepth;
for (++arr[n]; n>=0 && arr[n]>c+n; ++arr[--n]);
if (n<0) return 0;
for (int t = n+1; t<nDepth; ++t) arr[t] = arr[t-1],++arr[t];
return 1;
};
int main()
{
int n,m;
while(scanf("%d%d",&m,&n)==2)
{
int arr[30], outmap[30];
{for(int t=0;t<m;++t)arr[t]=t,outmap[t]=t+1;}
do
{
for(int t=0; t<n; ++t)
{
printf(" %d", outmap[arr[t]]);
}
putchar('\n');
}while(DFS_FindNext(arr, m, n));
}
return 0;
}