#include<stdio.h>
int v[502][502],n,m,nr;
void fill(int x1,int x2,int y1,int y2)
{
int i,j;
for(i=x1;i<=x2;++i)
for(j=y1;j<=y2;++j)
v[i][j]=nr;
}
void form(int x1,int y1,int x2,int y2)
{
if(x1>x2||y1>y2)
return;
int l=1,n=x2-x1+1,m=y2-y1+1;
while(l<=n&&l<=m)
l*=2;
l/=2;
++nr;
fill(x1,x1+l-1,y1,y1+l-1);
form(x1,y1+l,x1+l-1,y2);
form(x1+l,y1,x2,y1+l-1);
form(x1+l,y1+l,x2,y2);
}
int main()
{
freopen("piese.in","r",stdin);
freopen("piese.out","w",stdout);
int i,j;
scanf("%d%d",&n,&m);
form(1,1,n,m);
printf("%d\n",nr);
for(i=1;i<=n;++i)
{
for(j=1;j<=m;++j)
printf("%d ",v[i][j]);
printf("\n");
}
return 0;
}