import java.io.*; import java.util.*; public class Solution { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int m = in.nextInt(); System.out.println(minPaperCuts(n, m)); } private static long minPaperCuts(int n, int m) { long[][] minCuts = new long[n + 1][m + 1]; Arrays.fill(minCuts[0], 0); for (int i = 0; i < n + 1; ++i) { minCuts[i][0] = 0; } for (int i = 1; i < n + 1; ++i) { minCuts[i][1] = i - 1; } for (int i = 1; i < m + 1; ++i) { minCuts[1][i] = i - 1; } for (int i = 2; i < n + 1; ++i) { for (int j = 2; j < m + 1; ++j) { long minSoFar = Long.MAX_VALUE; for (int vCutPos = 1; vCutPos <= j / 2; ++vCutPos) { if (minCuts[i][j - vCutPos] + minCuts[i][vCutPos] < minSoFar) minSoFar = minCuts[i][j - vCutPos] + minCuts[i][vCutPos]; } for (int hCutPos = 1; hCutPos <= i / 2; ++hCutPos) { if (minCuts[i - hCutPos][j] + minCuts[hCutPos][j] < minSoFar) minSoFar = minCuts[i - hCutPos][j] + minCuts[hCutPos][j]; } minCuts[i][j] = minSoFar; } } return minCuts[n][m]; } }