program solitario;
uses Math;
var N,M,i,j, soluzione, con_x, senza_x, nuovariga, nuovacolonna:longint;
griglia:array[-1..12,-1..12] of longint;
function posso(r, c: longint): boolean;
begin
(*tris orizzontale*)
if (c-2>=0) and (griglia[r][c-2]=1) and (griglia[r][c-1]=1) then posso:=false
(*tris orizzontale*)
else if (r-2>=0) and (griglia[r-2][c]=1) and (griglia[r-1][c]=1) then posso:=false
(* Tris diagonale in alto a sx*)
else if (r-2>=0 ) and (c-2>=0) and (griglia[r-2][c-2]=1) and (griglia[r-1][c-1]=1) then posso:=false
(* Tris diagonale in alto a dx*)
else if (r-2>=0) and (c+2<M) and (griglia[r-2][c+2]=1) and (griglia[r-1][c+1]=1) then posso:=false
else posso := true;
end;
function gioca (riga, colonna:longint):longint;
begin
if riga>N then begin exit; end;
if colonna=M then nuovariga:=riga+1
else nuovariga:=riga;
nuovacolonna:= (colonna) mod M+1;
griglia[riga][colonna]:=0;
senza_x:= gioca(nuovariga, nuovacolonna);
griglia[riga][colonna]:=-1;
(*Se posso, metto la X*)
if posso (riga,colonna)=true then begin
griglia[riga][colonna]:=1;
con_x:=1+gioca(nuovariga, nuovacolonna);
griglia[riga][colonna]:=-1;
end;
(*Ritorno la soluzione migliore*)
gioca:= max(con_x,senza_x);
end;
begin
readln(N,M);
for i:=0 to N do
for j:=0 to M do griglia[i,j]:=-1;
writeln(gioca(0,0));
end.
cHJvZ3JhbSBzb2xpdGFyaW87CnVzZXMgTWF0aDsKdmFyIE4sTSxpLGosIHNvbHV6aW9uZSwgY29uX3gsIHNlbnphX3gsIG51b3ZhcmlnYSwgbnVvdmFjb2xvbm5hOmxvbmdpbnQ7CiAgICBncmlnbGlhOmFycmF5Wy0xLi4xMiwtMS4uMTJdIG9mIGxvbmdpbnQ7CgpmdW5jdGlvbiBwb3NzbyhyLCBjOiBsb25naW50KTogYm9vbGVhbjsKYmVnaW4KICAgICAgKCp0cmlzIG9yaXp6b250YWxlKikKICAgaWYgKGMtMj49MCkgYW5kIChncmlnbGlhW3JdW2MtMl09MSkgYW5kIChncmlnbGlhW3JdW2MtMV09MSkgdGhlbiBwb3Nzbzo9ZmFsc2UKICAgICAgKCp0cmlzIG9yaXp6b250YWxlKikKICAgICAgZWxzZSAgaWYgKHItMj49MCkgYW5kIChncmlnbGlhW3ItMl1bY109MSkgYW5kIChncmlnbGlhW3ItMV1bY109MSkgdGhlbiBwb3Nzbzo9ZmFsc2UKICAgICgqIFRyaXMgZGlhZ29uYWxlIGluIGFsdG8gYSBzeCopCiAgICAgIGVsc2UgaWYgKHItMj49MCApIGFuZCAoYy0yPj0wKSBhbmQgKGdyaWdsaWFbci0yXVtjLTJdPTEpIGFuZCAoZ3JpZ2xpYVtyLTFdW2MtMV09MSkgdGhlbiBwb3Nzbzo9ZmFsc2UKICAgICgqIFRyaXMgZGlhZ29uYWxlIGluIGFsdG8gYSBkeCopCiAgICAgIGVsc2UgaWYgKHItMj49MCkgYW5kIChjKzI8TSkgYW5kIChncmlnbGlhW3ItMl1bYysyXT0xKSBhbmQgKGdyaWdsaWFbci0xXVtjKzFdPTEpIHRoZW4gcG9zc286PWZhbHNlCiAgICAgICAgICBlbHNlICAgcG9zc28gOj0gdHJ1ZTsKZW5kOyAgICAKZnVuY3Rpb24gZ2lvY2EgKHJpZ2EsIGNvbG9ubmE6bG9uZ2ludCk6bG9uZ2ludDsKICBiZWdpbgogICBpZiByaWdhPk4gdGhlbiBiZWdpbiBleGl0OyBlbmQ7CiAgIGlmIGNvbG9ubmE9TSB0aGVuIG51b3ZhcmlnYTo9cmlnYSsxCiAgICAgICAgICAgICAgICAgIGVsc2UgbnVvdmFyaWdhOj1yaWdhOwogICAgbnVvdmFjb2xvbm5hOj0gKGNvbG9ubmEpIG1vZCBNKzE7CiAgICBncmlnbGlhW3JpZ2FdW2NvbG9ubmFdOj0wOwogICAgc2VuemFfeDo9IGdpb2NhKG51b3ZhcmlnYSwgbnVvdmFjb2xvbm5hKTsKICAgIGdyaWdsaWFbcmlnYV1bY29sb25uYV06PS0xOwoKICAgICAgICAgICgqU2UgcG9zc28sIG1ldHRvIGxhIFgqKQogICAgaWYgcG9zc28gKHJpZ2EsY29sb25uYSk9dHJ1ZSB0aGVuIGJlZ2luIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWdsaWFbcmlnYV1bY29sb25uYV06PTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uX3g6PTErZ2lvY2EobnVvdmFyaWdhLCBudW92YWNvbG9ubmEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZ2xpYVtyaWdhXVtjb2xvbm5hXTo9LTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7CiAgICAgICAgICAgICAgICAgICAoKlJpdG9ybm8gbGEgc29sdXppb25lIG1pZ2xpb3JlKikKICAgIGdpb2NhOj0gbWF4KGNvbl94LHNlbnphX3gpOwogCmVuZDsKYmVnaW4KCXJlYWRsbihOLE0pOwoJZm9yIGk6PTAgdG8gTiBkbwoJICAgICAgICAgICAgZm9yIGo6PTAgdG8gTSBkbyBncmlnbGlhW2ksal06PS0xOwogICAgICAgICAKCXdyaXRlbG4oZ2lvY2EoMCwwKSk7CgkKCQplbmQuCg==