import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Comparator; import java.util.Deque; import java.util.HashMap; import java.util.PriorityQueue; import java.util.StringTokenizer; class Main{ static final PrintWriter out=new PrintWriter(System.out); static final int INF=Integer.MAX_VALUE/2; public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String line=""; while((line=br.readLine())!=null&&!line.isEmpty()){ StringTokenizer st=new StringTokenizer(line); int a=Integer.parseInt(st.nextToken()); int b=Integer.parseInt(st.nextToken()); if(a%2==0||b%2==0){ if(a==b) out.println(a*b/4-1); else out.println(a*b/2-1); } else{ if(a==b) out.println((a*b-1)/4); else out.println((a*b-1)/2); } } } static class Pair{ int x; int y; Pair(int x,int y){ this.x=x; this.y=y; } } static class Edge{ int from; int to; int cost; Edge(int from,int to,int cost){ this.from=from; this.to=to; this.cost=cost; } Edge(int to,int cost){ this.to=to; this.cost=cost; } } static class Node{ int d; int v; Node(int d,int v){ this.d=d; this.v=v; } final static Comparator DISTANCE_ORDER=new DistanceOrderComparator(); static class DistanceOrderComparator implements Comparator{ public int compare(Node n1,Node n2){ return (n1.d>n2.d)?1:(n1.d