#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <stdlib.h>
#include <math.h>
#include <string>
#include <time.h>
#include <string.h>
#include <queue>
#include <stack>
#define sz size()
#define pb push_back
using namespace std;
typedef long long int ll;
ll mod=1e9+7;
ll exp(ll t,ll x){if(x==0) return 1;if(x==1) return t;if(x%2==1) return (t*exp((t*t)%mod,x/2))%mod;if(x%2==0) return exp((t*t)%mod,x/2);}
ll gcd(ll x,ll y){return x%y==0?y:gcd(y,x%y);}
ll lcm(ll x,ll y){return x*(y/gcd(x,y));}
ll bsum(ll u,ll b){return u<b?u:bsum(u/b,b)+u%b;}
ll prival(ll u,ll p){int cn=0;while(u%p==0){cn++;u=u/p;}return cn;}
bool isprime(ll x){for(ll i=2;i*i<=x;i++){if(x%i==0){return false;}}return true;}
void YAY(void){cout<<"YES"<<endl;}
void NAY(void){cout<<"NO"<<endl;}
int n, m;
int a[111][111];
int main(void)
{
    freopen(".10.in","r",stdin);
    freopen(".10.out","w",stdout);
	int i, j;
	cin>>n>>m;
	for(i=1 ; i<=n ; i++)
	{
		if(i%2==n%2)
		{
			for(j=1 ; j<=m ; j++)
			{
				a[i][j]=n*m-(i-1)*m+1-j;
			}
		}
		else
		{
			for(j=1 ; j<=m ; j++)
			{
				a[i][j]=n*m-(i-1)*m+1-(m+1-j);
			}
		}
	}
	for(i=1 ; i<=n ; i++)
	{
		for(j=1 ; j<=m ; j++)
		{
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}
