#include <stdio.h>
int v[10]={1,2,4,8,16,32,64,128,256,512};
int w[502][502];
int z=1;
void wtfpwned(int x1, int y1, int x2, int y2)
{
int k,i,j;
for (k=8; k>=0; k--)
{
if (x1+v[k]<=x2 && y1+v[k]<=y2)
{
for (i=x1; i<x1+v[k]; i++)
for (j=y1; j<y1+v[k]; j++)
w[i][j]=z;
z++;
if (x1+v[k]<x2)
wtfpwned(x1+v[k],y1,x2,y1+v[k]);
if (y1+v[k]<y2)
wtfpwned(x1,y1+v[k],x2,y2);
return;
}
}
}
int main()
{
FILE *in = fopen("piese.in","r");
FILE *out = fopen("piese.out","w");
int n,m,i,j;
fscanf(in,"%d%d",&n,&m);
wtfpwned(0,0,n,m);
fprintf(out,"%d\n",z-1);
for (i=0; i<n; i++)
{
for (j=0; j<m-1; j++)
fprintf(out,"%d ",w[i][j]);
fprintf(out,"%d\n",w[i][j]);
}
return 0;
}