program soitario;
uses Math;
var N,M,i,j, soluzione, con_x, senza_x, nuovariga, nuovacolonna:longint;
    griglia:array[0..12,0..12] of longint;
    
function gioca(r, c: longint): boolean;
begin
      (*tris orizzontale*)
   if (c-2>=0) and (griglia[r][c-2]=1) and (griglia[r][c-1]=1) then gioca:=false
      (*tris orizzontale*)
      else  if (r-2>=0) and (griglia[r-2][c]=1) and (griglia[r-1][c]=1) then gioca:=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 gioca:=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 gioca:=false
          else   gioca := true;
end;    
function riempi (riga, colonna:longint):longint;
  begin
    if riga>=N then  begin soluzione:=0; exit; end
                   else 
                 begin
                   if griglia[riga,colonna]<>-1 then begin soluzione:=griglia[riga,colonna];  end
                                                else
                                                    begin
                                                        if colonna+1=M then nuovariga:=riga+1
                                                                       else nuovariga:=riga;
                                                        nuovacolonna:= (colonna+1) mod M;
                                                        
                                                        (* Non metto la X*)
                                                        senza_x:= riempi(nuovariga,nuovacolonna); con_x:=0;
                                                        
                                                        (*Se posso, metto la X*)
                                                        if gioca (riga,colonna)=true then
                                                                                      begin 
                                                                                       if colonna+1=M then nuovariga:=riga+1
                                                                                                       else nuovariga:=riga;
                                                                                       nuovacolonna:= (colonna+1) mod M;
                                                                                       griglia[nuovariga][nuovacolonna]:=1;
                                                                                       con_x:= 1 + Riempi(nuovariga,nuovacolonna);
                                                                                       for i:=1 to N do begin
	            for j:=1 to M do write(griglia[i,j],' '); writeln; end; writeln;

                                                                                       (* Reset della griglia[riga][col]*)
                                                                                       griglia[riga][colonna]:=-1;
                                                                                       
                                                                                      end;
                                                       (*Ritorno la soluzione migliore*)
                                                     
                                                       
                                             end;
                                              griglia[riga][colonna]:= max(senza_x,con_x); 
                       soluzione:=griglia[riga, colonna];                                 
                   end;
           riempi:=soluzione;      
end;                   
begin
	readln(N,M);
	for i:=0 to N do
	            for j:=0 to M do griglia[i,j]:=-1;
	       con_x:= 0;
	writeln(riempi(0 , 0));
end.

