#include <stdio.h>
int result[30][30]={0};
void pr(int n, int m);
int Add1(int i, int j);
int Add2(int i, int j);
int Add3(int i, int j);
int F(int i, int j);
void one(int n);
void two(int n);
void three(int n);
int main(void)
{
int n, m;
scanf("%d %d", &n, &m);
switch(m)
{
case 1:
one(n);
break;
case 2:
two(n);
break;
case 3:
three(n);
break;
}
pr(n, m);
return 0;
}
void pr(int n, int m)
{
int i, j;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(result[i][j]==0 && m!=2)
break;
else if(result[i][j]==0 && m==2)
printf(" ");
else
printf("%d ", result[i][j]);
}
printf("\n");
}
}
int F(int i, int j)
{
if(i<0 || i>30 || j<0 || j>30)
return 0;
else
return result[i][j];
}
int Add1(int i, int j)
{
return F(i-1, j-1) + F(i-1, j);
}
void one(int n)
{
int i, j;
result[0][0]=1;
for(i=1; i<n; i++)
{
for(j=0; j<=i; j++)
{
result[i][j]=Add1(i, j);
}
}
}
int Add2(int i, int j)
{
return F(i+1, j+1) + F(i+1, j);
}
void two(int n)
{
int i, j;
result[n-1][n-1]=1;
for(i=n-2; i>=0; i--)
{
for(j=n-1; j>=i; j--)
{
result[i][j]=Add2(i, j);
}
}
}
int Add3(int i, int j)
{
return F(i, j+1) + F(i+1, j+1);
}
void three(int n)
{
int i, j;
result[n-1][n-1]=1;
for(j=n-2; j>=0; j--)
{
for(i=n-1; i>=j; i--)
{
result[i][j]=Add3(i, j);
}
}
}