/*
#include <stdio.h>
int main()
{
int arr[11][11]= {}, i, j, a, b, c, d;
int k, w;
for(i=1; i<=10; i++)//보드판 입력
{
for(j=1; j<=10; j++)
{
scanf("%d", &arr[i][j]);
}
}
int z[9];//player의 좌표는 최대 8개 이므로 8개 1차원 배열 선언
int x[9];
int num;
scanf("%d", &num);
for(w=1;w<=num;w++)
{
scanf("%d %d", &z[w], &x[w]);//player 좌표 입력
}
for(i=1; i<=10; i++)
{
for(j=1; j<=10; j++)
{
if(arr[i][j] > 0)//만약에 물풍선이면
{
int ballon = arr[i][j];
for(k = 1; k<= ballon; k++) //right
{
if(j+k>10||arr[i][j+k]==-1) break;
else if(arr[i][j+k]>0)//0보다 더 큰 물풍선이 있으면 건너뛰기
{
continue;
}
arr[i][j+k]=-2;
}
for(k = 1; k<= ballon; k++)//left
{
if(j-k<=0||arr[i][j-k]==-1) break;
else if(arr[i][j-k]>0)//0보다 더 큰 물풍선이 있으면 건너뛰기
{
continue;
}
arr[i][j-k]=-2;
}
for(k = 1; k<= ballon; k++)//ㅕㅔ
{
if(i+k>10||arr[i+k][j]==-1)break;
else if(arr[i+k][j]>0)//0보다 더 큰 물풍선이 있으면 건너뛰기
{
continue;
}
arr[i+k][j]=-2;
}
for(k = 1; k<= ballon; k++)//down
{
if(i-k<=0||arr[i-k][j]==-1)break;
else if(arr[i-k][j]>0)//0보다 더 큰 물풍선이 있으면 건너뛰기
{
continue;
}
arr[i-k][j]=-2;
}
arr[i][j]=-2;
}
}
}
for(i=1;i<=num;i++)//player 좌표 arr[x[i]z[i]]가 만약에 -2면가 아니면 player 좌표에 i를 추가
{
if(arr[z[i]][x[i]]!=-2)
{
arr[z[i]][x[i]]=i;//만약에 살았으면 보드판에 출력
}
}
for(i=1; i<=10; i++)//출력
{
for(j=1; j<=10; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("Character Information\n");//캐릭터 생존 유무 출력
for(i=1;i<=num;i++)
{
if(arr[z[i]][x[i]]==-2)//만약에 물풍선이 있으면죽음
{
printf("player %d dead\n",i);
}
else//아니면 플레이어 삼
{
printf("player %d survive\n", i);
}
}
}
*/
#include <stdio.h>
int main(void)
{
//크레이지 아케이드 보다 니가 더 나빠 이 2차원 배결 달팽이
int n,m,i,j,k=1,x=1,y=1;
int arr[101][101]= {};
scanf("%d %d", &n,&m);
for(j=1; j<=m; j++)
{
y++;
arr[x][y]=k++;
}
while(k<m*n)
{
x++;
for(i=1;i<=n-1;i++)
{
arr[x][y]=k++;
}
}
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}