#include<bits/stdc++.h>
using namespace std;
int a[100][100],n,m;

//x y表示要填充的下标,k表示要填充的值 
void fun(int x,int y,int k){
	a[x][y] = k;
	//按照顺时针:右、下、左、上,分别探测四个方向
	//向右探测:右侧那个格子没有填值,且没有出方阵
	if(a[x][y+1] == 0 && y+1<=m) fun(x,y+1,k+1); 
	if(a[x+1][y] == 0 && x+1<=n) fun(x+1,y,k+1);
	if(a[x][y-1] == 0 && y-1>=1) fun(x,y-1,k+1);
	if(a[x-1][y] == 0 && x-1>=1) fun(x-1,y,k+1);
} 

int main(){
	int i,j;
    cin>>n>>m;
    //从1,1点开始,填充1 
    fun(1,1,1); 
    
    //打印
	for(i = 1;i <= n;i++){
		for(j = 1;j <= m;j++){
			cout<<setw(3)<<a[i][j];
		}
		cout<<endl;
	} 
}

/**************************************************************
	Problem: 1586
	User: admin
	Language: C++
	Result: Accepted
	Time:63 ms
	Memory:2112 kb
****************************************************************/