#include <bits/stdc++.h>
using namespace std;
int q[101][101];//放外面才行
//定义在main函数里也可以,但是必须遍历一次让每个数全都变成0, 定义在外面的数组是默认全0的
//main函数里的数组开在栈里,开的时候不会清空,里面可能会存在一些垃圾值,不全是0,所以需要遍历一下让他全变成0。
//外面的数组开在堆里,默认就是全0的。大概应该是这样。
//y总说法是,全局变量默认初始为0,局部变量初始是随机值
int main(){
int n,m;
cin>>n>>m;
int dx[]={0,1,0,-1};int dy[]={1,0,-1,0};
for(int x=0,y=0,d=0,k=1;k<=n*m;k++){
q[x][y]=k;
int a=x+dx[d];int b=y+dy[d];
if(a<0||a>=n||b<0||b>=m||q[a][b]){//||和&&这里没有区别,都是先后满足的
d=(d+1)%4;//d表示初始方向为东,碰壁后换移动方向
a=x+dx[d]; b=y+dy[d];//记得把新的换上去
}x=a;y=b;//要先设置a,b;不能直接x=x+dx[d];y=y+dy[d];因为考虑到出界与重复的问题要先判断再改变变量;
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)cout<<q[i][j]<<" ";
cout<<endl;
}//输出 ,可以记忆一下
return 0;
}