ef max_carpets_area(h, w):
    dp = [[0] * (w+1) for _ in range(h+1)]
    
    # Заполнение массива dp
    for i in range(1, h+1):
        for j in range(1, w+1):
            # Для каждой ячейки рассматриваем два варианта: пол и ковер
            # Если пол, то можно просто скопировать значение из ячейки dp[i-1][j]
            # Если ковер, то можно посчитать новое значение как сумму площади этого ковра (i*j) и суммы площадей, которые можно уложить на оставшейся площади (dp[i][j-i] + dp[i-i][j])
            dp[i][j] = max(dp[i-1][j], dp[i][j-1], i*j, dp[i][j-i] + dp[i-i][j])

    return dp[h][w]

# Считываем размеры площадки
h, w = map(int, input().split())

# Вычисляем и выводим максимальную суммарную площадь ковров
print(max_carpets_area(h, w))