#include <stdio.h>
#define Nmax 501
int d[Nmax][Nmax], rez, i, j, M, k, n, m;
void a(int,int,int,int);
inline int min(int x, int y) { return x<y?x:y; }
int main()
{
freopen("piese.in", "r", stdin);
scanf("%d %d\n", &n, &m);
fclose(stdin);
freopen("piese.out", "w", stdout);
a(1,1,n,m);
printf("%d\n", rez);
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
printf("%d ", d[i][j]);
printf("\n");
}
fclose(stdout);
return 0;
}
void a(int x1, int y1, int x2, int y2)
{
int k;
M=min(x2-x1+1,y2-y1+1);
for (k=1; (k<<1)<=M; k<<=1);
for (++rez,i=x1; i<x1+k; i++)
for (j=y1; j<y1+k; j++)
d[i][j]=rez;
if (x1+k<=x2) a(x1+k,y1,x2,y1+k-1);
if (y1+k<=y2) a(x1,y1+k,x1+k-1,y2);
if (x1+k<=x2 && y1+k<=y2) a(x1+k,y1+k,x2,y2);
}