#include<bits/stdc++.h>
using namespace std;
int n,m;
bool flag;
int a[1000][1000];
bool ip(int x){
	if(x==1||x==0)
	return false;
	for(int j=2;j<=sqrt(x);j++)
	if(x%j==0)
	return false;
	return true;}
bool use[10000];
void dfs(int x,int y,int step){
	if(step==n*m+1){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++)
			cout<<a[i][j];
			cout<<endl;}
		flag=true;
		return;}
	for(int i=1;i<=n*m&&!flag;i++) {
		if(!use[i]){
		    int ux=x-1,uy=y;
			if(ux>0&&ux<=n&&uy>0&&uy<=m){
				if(!ip(a[ux][uy]+i))
				continue;} 
			int lx=x,ly=y-1;
			if(lx>0&&lx<=n&&ly>0&&ly<=m){
				if(ip(a[lx][ly]+i)==false)
				continue;}
			a[x][y]=i;
			use[i]=true;
			int nx=x,ny=1+y;
			if(ny>m){
				ny=1;nx++;}
			if(nx>n){
				for(int i=1;i<=n;i++)
			   	for(int j=1;j<=m;j++)
			    cout<<a[i][j];flag=true;
				return;} 
			dfs(nx,ny,step+1);
use[i]=false;
}}}
int main(){
	cin>>n>>m;
	flag=false;
	dfs(1,1,1);
	if(!flag)
	cout<<"NO"<<endl;
	return 0;
}