# include <stdio.h>
const long int MAXN=1000;
long int n,k;
void citire()
{
FILE *f=fopen("tablete.in","r");
fscanf(f,"%ld%ld",&n,&k);
fclose(f);
}
void calculeaza()
{
FILE *g=fopen("tablete.out","w");
long int i,j,c=0;
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
{
++c;
if (j>1) fprintf(g," ");
//k par, n par
if (k%2==0 && n%2==0) fprintf(g,"%ld",c);
//k par, n impar
if (k%2==0 && n%2==1)
{
//liniile impare diferite de n primesc c+n pe ultima pozitie
if (i%2==1 && i<n && j==n) fprintf(g,"%ld",c+n);
//liniile pare devin +1
else if (i%2==0) fprintf(g,"%ld",c-1);
//altfel raman la fel
else fprintf(g,"%ld",c);
}
//k impar, n par
if (k%2==1 && n%2==0)
{
//pr prima linie sari peste k
if (i==1)
if (j>=k && j<n) fprintf(g,"%ld",c+1);
else if (j==n) fprintf(g,"%ld",n*n);
else if (j<k) fprintf(g,"%ld",c);
if (i==2)
if (j==1) fprintf(g,"%ld",k);
else fprintf(g,"%ld",c-1);
if (i>2) fprintf(g,"%ld",c-1);
}
if (k%2==1 && n%2==1)
{
//prima linie; sari peste k si pe ultima poz pui n^2
if (i==1)
if (j<k) fprintf(g,"%ld",c);
else if (j>=k && j<=n-1) fprintf(g,"%ld",c+1);
else if (j==n) fprintf(g,"%ld",n*n);
//liniile pare
if (i%2==0 && i!=n-1)
if (j==n) fprintf(g,"%ld",c+n);
else fprintf(g,"%ld",c);
else if (i%2==0) fprintf(g,"%ld",c);
//liniile impare intre 3 si n-2
if (i%2==1 && i>=3 && i<=n-2) fprintf(g,"%ld",c-1);
//linia n
if (i==n)
if (j==1) fprintf(g,"%ld",k);
else fprintf(g,"%ld",c-1);
}
}
fprintf(g,"\n");
}
fclose(g);
}
int main()
{
citire();
calculeaza();
return 0;
}