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 griglia[riga,colonna]=-1 then 
                                    begin
                                        if colonna+1=M then begin if riga<N-1 then nuovariga:=riga+1
                                                                              else exit; end
                                                       else nuovariga:=riga;
                                        if colonna<N then nuovacolonna:= (colonna+1) mod M;
                                        (*Se posso, metto la X*)
                                        if gioca (riga,colonna)=true then
                                                                        begin 
                                                                            griglia[riga,colonna]:=1; 
                                                                            
                                                                            con_x:= 1 + Riempi(nuovariga,nuovacolonna);
                                                                            (* Reset della griglia[riga][col]*)
                                                                           
                                                                        end;
                                        (* Non metto la X*)
                                        griglia[riga][colonna]:=0;
                                        senza_x:= Riempi(nuovariga,nuovacolonna);
                                        (*Ritorno la soluzione migliore*)
                                        
                                        griglia[riga,colonna]:=max(con_x, senza_x); 
                                       riempi:=griglia[riga,colonna]
                                    end;
        riempi:=griglia[riga,colonna] ;
        
end;                   
begin
	readln(N,M);
	for i:=0 to N do
	            for j:=0 to M do griglia[i,j]:=-1;
	writeln(riempi(0 ,0));
end.
