program tetris;
{ constraints }
const
MAXN = 500;
{ input data }
var
N, M, i, j, nbpiece, ans : longint;
table : array[0..MAXN-1,0..MAXN-1] of longint;
begin
{
uncomment the following lines if you want to read/write from files
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
}
{ read numbers N and M in a single line }
readln(N, M);
if (N mod 2 = 0) and (M mod 2 = 0) then
begin
nbpiece := 0;
for i := 0 to N-1 do
for j := 0 to M-1 do
begin
table[2*i][2*j]:= nbpiece;
table[2*i + 1][2*j] := nbpiece;
table[2*i][2*j + 1] := nbpiece;
table[2*i + 1][2*j + 1] := nbpiece;
if j<M div 2 then inc(nbpiece);
end;
ans:=(N div 2) *(M div 2);
end
else
if N mod 4 = 0 then
begin
nbpiece:= 0;
for j := 0 to M-1 do
for i := 0 to N-1 do
begin
table[i][j] := nbpiece;
if i mod 4 = 3 then inc(nbpiece);
end;
ans:=(N div 4) * M ;
end
else
if M mod 4 = 0 then
begin
nbpiece:= 0;
for i := 0 to N-1 do
for j := 0 to M-1 do
begin
table[i][j] := nbpiece;
if j mod 4 = 3 then inc(nbpiece);
end;
ans:=N *(M div 4)
end
else ans:=-1;
writeln(ans);
if ans <>-1 then
for i:=0 to N-1 do
begin
for j:=0 to M-1 do
write(table[i][j],' ');
writeln;
end;
end.
cHJvZ3JhbSB0ZXRyaXM7CnsgY29uc3RyYWludHMgfQpjb25zdAogICAgTUFYTiA9IDUwMDsKCnsgaW5wdXQgZGF0YSB9CnZhcgogICAgTiwgTSwgaSwgaiwgbmJwaWVjZSwgYW5zICA6IGxvbmdpbnQ7CiAgICB0YWJsZSAgICAgICA6IGFycmF5WzAuLk1BWE4tMSwwLi5NQVhOLTFdIG9mIGxvbmdpbnQ7CgpiZWdpbgp7CiAgICB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBpZiB5b3Ugd2FudCB0byByZWFkL3dyaXRlIGZyb20gZmlsZXMKICAgIGFzc2lnbihpbnB1dCwgICdpbnB1dC50eHQnKTsgIHJlc2V0KGlucHV0KTsKICAgIGFzc2lnbihvdXRwdXQsICdvdXRwdXQudHh0Jyk7IHJld3JpdGUob3V0cHV0KTsKfQoKICAgIHsgcmVhZCBudW1iZXJzIE4gIGFuZCBNIGluIGEgc2luZ2xlIGxpbmUgfQogICAgcmVhZGxuKE4sIE0pOwogICAgCiAgICBpZiAoTiBtb2QgMiA9IDApIGFuZCAoTSBtb2QgMiA9IDApICB0aGVuCiAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgIG5icGllY2UgOj0gMDsKICAgICAgICAgICAgICAgIGZvciBpIDo9IDAgdG8gTi0xIGRvCiAgICAgICAgICAgICAgICAgICAgIGZvciBqIDo9IDAgdG8gTS0xIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVbMippXVsyKmpdOj0gbmJwaWVjZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVbMippICsgMV1bMipqXSA6PSBuYnBpZWNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVsyKmldWzIqaiArIDFdIDo9IG5icGllY2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlWzIqaSArIDFdWzIqaiArIDFdIDo9IG5icGllY2U7IAogICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBqPE0gZGl2IDIgdGhlbiBpbmMobmJwaWVjZSk7ICAgCiAgICAgICAgICAgICAgICAgICAgICAgZW5kOyAKICAgICAgICAgICAgICAgIGFuczo9KE4gZGl2IDIpICooTSBkaXYgMik7ICAgICAgICAgCiAgICAgICAgICAgICAgZW5kCiAgICAgICAgIGVsc2UgICAgICAgICAgCiAgICAgICAgICAgICAgaWYgTiBtb2QgNCA9IDAgdGhlbgogICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgbmJwaWVjZTo9IDA7CiAgICAgICAgICAgICAgICAgICBmb3IgIGogOj0gMCB0byBNLTEgZG8KICAgICAgICAgICAgICAgICAgICAgIGZvciBpIDo9IDAgIHRvIE4tMSBkbwogICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVbaV1bal0gOj0gbmJwaWVjZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSBtb2QgNCA9IDMgdGhlbiBpbmMobmJwaWVjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOwogICAgICAgICAgICAgICAgICAgYW5zOj0oTiBkaXYgNCkgKiBNIDsgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBlbmQgICAgICAgICAgIAogICAgICAgICBlbHNlIAogICAgICAgICAgICAgIGlmIE0gbW9kIDQgPSAwIHRoZW4KICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICBuYnBpZWNlOj0gMDsKICAgICAgICAgICAgICAgICAgICBmb3IgaSA6PSAwICB0byBOLTEgZG8KICAgICAgICAgICAgICAgICAgICAgIGZvciAgaiA6PSAwIHRvIE0tMSBkbwogICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVtpXVtqXSA6PSBuYnBpZWNlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgaiBtb2QgNCA9IDMgdGhlbiBpbmMobmJwaWVjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsKICAgICAgICAgICAgICAgICAgIGFuczo9TiAqKE0gZGl2IDQpICAgICAgICAgICAKICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgZWxzZSBhbnM6PS0xOwogICAgd3JpdGVsbihhbnMpOwogICAgaWYgYW5zIDw+LTEgIHRoZW4gICAKICAgICAgICAgIGZvciBpOj0wIHRvIE4tMSBkbwogICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgZm9yIGo6PTAgdG8gTS0xIGRvCiAgICAgICAgICAgICAgICB3cml0ZSh0YWJsZVtpXVtqXSwnICcpOwogICAgICAgICAgICAgICAgd3JpdGVsbjsKICAgICAgICAgICAgZW5kOyAgICAKZW5kLgo=