#include <stdio.h>
#include <algorithm>
using namespace std;
int i,j,a[16]={1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024},n,m,x[509][509],nr=0;
void pp(int l1,int l2,int c1,int c2)
{int d1,d2,w;
for (d1=0;;d1++)
if ((a[d1+1]>c2-c1+1) || (a[d1+1]>l2-l1+1)) { w=a[d1]; break;}
nr++;
for (d1=l1;d1<=l1+w-1;d1++)
for (d2=c1;d2<=c1+w-1;d2++)
x[d1][d2]=nr;
if (c1+w<=c2) pp(l1, l1+w-1, c1+w , c2);
if (l1+w<=l2) pp(l1+w, l2 , c1, c2);
}
int main()
{
freopen("piese.in","r",stdin);
freopen("piese.out","w",stdout);
scanf("%d %d",&m,&n);
pp(1,m,1,n);
printf("%d\n",nr);
for (i=1;i<=m;i++,printf("\n"))
for (j=1;j<=n;j++)
printf("%d ",x[i][j]);
return 0;}