program solitario;
uses Math;
var N,M,i,j, a, con_x, senza_x, nuovariga, nuovacolonna, ricorda,ricordatot,totale:longint;
    griglia:array[0..12,0..12] of longint;
    
function gioca(r, c: longint): boolean;
begin
      (* Tris diagonale in alto a dx*)
      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  if ((r+2<=N) and (c+2<=M) and (griglia[r+2][c+2]=1) and (griglia[r+1][c+1]=1)) then gioca:=false
      else    if ((r+2<=N) and (c-2>=0) and (griglia[r+2][c-2]=1) and (griglia[r+1][c-1]=1)) then gioca:=false
      
       
    (*tris orizzontale*)
      else  if (c-2>=0) and (griglia[r][c-2]=1) and (griglia[r][c-1]=1) then gioca:=false
    (*tris verticale*)
      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
      else   gioca := true;
end;    
function riempi (riga, colonna,  tot:longint):longint;
  begin
    if riga>=N then riempi(0,colonna+1,tot);
             
    if colonna>=M then exit;
                 
    ricorda:=griglia[riga,colonna];
 
    con_x:=0;
    if gioca (riga,colonna)=true then
                                   begin 
                                        griglia[riga][colonna]:=1;
                                         con_x:= Riempi(riga,colonna+1, tot+1);
                                                          (* Reset della griglia[riga][col]*)
                                         if ricorda=0 then griglia[riga, colonna]:=0;                 
                                   end;
                                        (* Non metto la X*)
    if ricorda=0 then  senza_x:=Riempi(riga,colonna+1, tot);
                                        (*Ritorno la soluzione migliore*)
   riempi:=max(con_x,senza_x);
                                 for i:=0 to N-1 do 
                                       for j:=0 to M-1 do 
                                                    if griglia[i,j]=1 then totale:=totale+1;
                                                    
                     writeln(totale);  
                      
                     
                                                    
                   
                                  for i:=0 to N-1 do begin 
                                       for j:=0 to M-1 do 
                                                    write (griglia[i,j],' ');
                                                    writeln
                                                    end;
                                                    writeln;

                          
                                  
         
             
                                                  
end;                   
begin
	readln(N,M);
	 if M<N then begin a:=N; N:=M; M:=a; end;
	  if N<=2 then writeln(N* (M-(M div 3)));
	  ricordatot:=0;
	for i:=0 to N-1 do
	            for j:=0 to M-1 do griglia[i,j]:=0;
	            totale:=0;
  riempi(0,0,0);
end.
