#include <stdio.h>
FILE *fin,*fout;
int p2[10]={1,2,4,8,16,32,64,128,256,501};
int a[510][510];
long i,j,n,m,nr;
void umple(int x1,int y1,int x2,int y2){
int i,j,latx,laty,c,latmin;
if(x1<=n && x2<=n && y1<=m && y2<=m)
if(x1<=x2 && y1<=y2){
latx=x2-x1+1;
laty=y2-y1+1;
latmin=latx<laty?latx:laty;
for(j=0;j<=9&&p2[j]<=latmin;j++);
j--;
nr++;
for(i=x1;i<=x1+p2[j]-1;i++)
for(c=y1;c<=y1+p2[j]-1;c++) a[i][c]=nr;
umple(x1,y1+p2[j],x1+p2[j]-1,y2);
umple(x1+p2[j],y1,x2,y2);
}
}
int main(){
fin=fopen("piese.in","r");
fout=fopen("piese.out","w");
fscanf(fin,"%ld%ld",&n,&m);
nr=0;
umple(1,1,n,m);
fprintf(fout,"%ld\n",nr);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
fprintf(fout,"%ld ",a[i][j]);
fprintf(fout,"\n");
}
fclose(fin); fclose(fout);
return 0;
}