You are given a rectangular board of *M* × *N* squares. Also you are given an unlimited number of standard domino pieces of 2 × 1 squares. You are allowed to rotate the pieces. You are asked to place as many dominoes as possible on the board so as to meet the following conditions:

1. Each domino completely covers two squares.

2. No two dominoes overlap.

3. Each domino lies entirely inside the board. It is allowed to touch the edges of the board.

Find the maximum number of dominoes, which can be placed under these restrictions.
In a single line you are given two integers *M* and *N* — board sizes in squares (1 ≤ *M* ≤ *N* ≤ 16).
'''
a = int(input())
if(a % 2 == 0):
    print("Mahmoud")
else:
    print("Ehab")

n = int(input())
i = int(n // 111)
if n % 111 != 0:
    i += 1
print(i * 111)

N, K = map(int, input().split())
n = K * 2 - 1
if(n <= N):
    print("YES")
else:
    print("NO")

c = input()
ans = str()
if(c == "a"):
    ans = "vowel"
elif(c == "e"):
    ans = "vowel"
elif(c == "i"):
    ans = "vowel"
elif(c == "o"):
    ans = "vowel"
elif(c == "u"):
    ans = "vowel"
else:
    ans = "consonant"
print(ans)

a, b = map(int, input().split())
ans = ""
if(a % 3 == 0):
    ans = "Possible"
elif(b % 3 == 0):
    ans = "Possible"
elif((a + b) % 3 == 0):
    ans = "Possible"
else:
    ans = "Impossible"
print(ans)

a, b = map(int, input().split())
ans = (a + b) / 2 + 0.5
print(int(ans))

A, B, C = map(int, input().split())
ans = max(10 * A + B + C, A + 10 * B + C, A + B + 10 * C)
print(ans)

A, D = map(int, input().split())
ans = min((A + 1) * D, A * (D + 1))
print(ans)

N = int(input())
ans = N + 1
if(ans > 12):
    print(ans - 12)
else:
    print(ans)

N = int(input())
print(N - 1)

N = input()
ans = list(N)
while(ans and N[-1] == "0"):
    N.pop()
if N == N[::-1]:
    print("Yes")
else:
    print("No")

a, b, c = input().split()
ans = a[0] + b[0] + c[0]
print(ans.upper())

name = input()
print("YES" if name[::-1] == name else "NO")

A, B = map(int, input().split())
ans = max(A, B)
print(ans)

s = input()
ans = s[0] + str(len(s) - 2) + s[-1]
print(ans)


def isSame(var):
    if(var[0] == var[1] and var[1] == var[2] and var[2] == var[3]):
        return "SAME"
    else:
        return "DIFFERENT"


n = input()
print(isSame(n))

m = int(input())
print(48 - m)

N = int(input())
print((N - 2) * 180)

s = input()
cnt = 0
for i in range(len(s)):
    if(s[i] == 'x'):
        cnt += 1
print("YES" if cnt <= 7 else "NO")

r = int(input())
result = (3 * r)**2
print(result)

s = input()
print(s.count("1"))

a, b = map(int, input().split())
ab = (a - 1) * (b - 1)
print(ab)

s = input()
if (s[0] == s[1] and s[1] == s[2]):
    print("Yes")
elif (s[1] == s[2] and s[2] == s[3]):
    print("Yes")
else:
    print("No")

x, a, b = map(int, input().split())
da = abs(a - x)
db = abs(b - x)
if(da < db):
    print("A")
else:
    print("B")

a = int(input())
b = int(input())
c = input()
if(c == "/"):
    print(a // b)
elif(c == "+"):
    print(a + b)
elif(c == "-"):
    print(a - b)
else:
    print(a * b)

c = input()
if(c == "A"):
    print("Vowel")
elif(c == "E"):
    print("Vowel")
elif(c == "I"):
    print("Vowel")
elif(c == "O"):
    print("Vowel")
elif(c == "U"):
    print("Vowel")
else:
    print("Consonant")

t = int(input())
for i in range(t):
    a, b, c = map(int, input().split())
    ans = a + b + c
    if(ans == 180):
        print("YES")
    else:
        print("NO")

s = input()
print(s.count("1"))

n = int(input())
a = int(input())
if(n % 500 <= a):
    print("Yes")
else:
    print("No")

a = input()
b = input()
ans = len(a) * len(b)
print(ans)

W, H = map(int, input().split())
if(3*W == 4*H):
    print("4:3")
else:
    print("16:9")

s1, e1 = map(int, input().split())
s2, e2 = map(int, input().split())
s3, e3 = map(int, input().split())
ans = (s1 * e1 + s2 * e2 + s3 * e3) // 10
print(ans)

l1, l2, l3 = map(int, input().split())
if(l1 == l2):
    print(l3)
elif(l2 == l3):
    print(l1)
else:
    print(l2)


def dstring(s):
    return s + s


s = input()

print(dstring(s))
a = [0, 1, 3, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1]
x, y = map(int, input().split())
print("Yes" if a[x] == a[y] else "No")

A = int(input())
print(7 - A)

N, K = map(int, input().split())
if(N % K == 0):
    print(0)
else:
    print(1)

A1, A2, A3 = map(int, input().split())
ans = max(A1, A2, A3) - min(A1, A2, A3)
print(ans)

a, b, c, d = map(int, input().split())
if abs(c-a) <= d:
    print("Yes")
elif abs(b-a) <= d and abs(c-b) <= d:
    print("Yes")
else:
    print("No")

a, b, x = map(int, input().split())
o = x >= a and x <= a + b
if(o):
    print("YES")
else:
    print("NO")

N = int(input())
print(N//3)


def square(var):
    return var**2


def cube(var):
    return var**3


def root(var):
    return var**0.5


print(root(2))


def bubbleSort(a):
    for i in range(len(a)):
        for j in range(len(a)-i-1):
            if a[j] > a[j+1]:
                a[j], a[j+1] = a[j+1], a[j]


l = [3, 2, 1, 8, 4]
bubbleSort(l)
print(l)

t = int(input())
for i in range(t):
    case = int(input())
    if(case % 4 == 0):
        print("Even")
    elif(case % 2 == 0 and case % 4 != 0):
        print("Same")
    else:
        print("Odd")

K, X = map(int, input().split())
if(500*K >= X):
    print("Yes")
else:
    print("No")

ac, test = map(int, input().split())
if(ac == test):
    print("Yes")
else:
    print("No")


def main():
    a, b = input().split()
    if(a < b):
        print("<")
    elif(a == b):
        print("=")
    else:
        print(">")


if __name__ == "__main__":
    main()

N = int(input())
print(N * 800 - (N // 15) * 200)

x, a, b = map(int, input().split())
if(-a + b <= 0):
    print("delicious")
elif(-a + b <= x):
    print("safe")
else:
    print("dangerous")

a, b, c = map(int, input().split())
if(a == (b+c) or b == (c+a) or c == (b+a)):
    print("Yes")
else:
    print("No")

d = sorted(list(map(int, input().split())))
print("YES" if (d[0] == 1 and d[1] == 4 and d[2] == 7 and d[3] == 9) else "NO")

a = input()
print(len(a) * "?")


class Solution:
    def isPalindrome(self, x: int):
        x = str(x)
        if(x[::-1] != x):
            return "false"
        elif("-" in x):
            return "false"
        else:
            return "true"


class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        if(needle in haystack):
            return haystack.index(needle)
        else:
            return -1


a = int(input())
ans = a // 2
print(ans ** 2)

x, y, z = map(int,input().split())
print((y * z - 1) // x)

A,B = map(int,input().split())
if A == 1:
  A = 14
if B == 1:
  B = 14

if  A>B:
  print("Alice")
elif B>A:
  print("Bob")
else:
  print("Draw")

C = input()
if(C[0] == C[1] and C[1] == C[2]):
    print("Won")
else:
    print("Lost")

s = input()
if("AC" in s):
    print("YES")
else:
    print("NO")

a, b, c, d = map(int,input().split())
team_a = max(a, b) / min(a,b)
team_b = max(c, d) / min(c, d)
if(team_a > team_b):
    print("AOKI")
elif(team_a == team_b):
    print("DRAW")
else:
    print("TAKAHASHI")

A = int(input())
B = int(input())
if(A > B):
    print("GREATER")
elif(A == B):
    print("EQUAL")
else:
    print("LESS")

N,M = map(int,input().split())
if(M == 2):
    print(1)
else:
    print(2)

n = int(input())
for i in range(n):
    s = input()
    takahashi = s.count("R")
    aoki = s.count("B")
if(takahashi == aoki):
    print("DRAW")
elif(takahashi > aoki):
    print("TAKAHASHI")
else:
    print("AOKI")
A,B,C = map(int,input().split())
ans = A**2 + B**2
if(C**2 > ans):
    print("Yes")
else:
    print("No")

N = int(input())
a = list(map(int,input().split()))
b= list(map(int,input().split()))
x=a[0]
y=b[0]
for i in range(1,N):
    x=max(x,a[i])
    y=min(y,b[i])
print(max(y-x+1,0))

n = int(input())
print(input().count("ABC"))

n = int(input())
s, t = input().split()
ans = ''
for i in range(n):
  ans += s[i]
  ans += t[i]
print(ans)

n, x = map(int,input().split())
print(x-1 if n - x > x - 1 else n - x)

print(int(input()) - 1)

a, b, c = map(int,input().split())
l = [a, b, c]
l = sorted(l)
if(l[0] == 5 and l[1] == 5 and l[2] == 7):
    print("YES")
else:
    print("NO")

a, b, c = map(int,input().split())
ans = 0
if(a <= b):
    print(c // a)
else:
    print(c // b)

a, b, c = map(int,input().split())
print(2 * (a * b + a * c + b * c))

def push(var, var_2):
    return var.append(var_2)
def pop(var):
    if isEmpty(var):
        return False
    else:
        var.pop()
def isEmpty(var):
    if not var:
        raise IndexError("Index Out Of Range")
    else:
        return False

def sort(a):
    for i in range(len(a)):
        for j in range(len(a) - i - 1):
            if(a[j] > a[j + 1]):
                a[j], a[j + 1] = a[j + 1], a[j]

s = input()
ans = s[:4] + " " + s[4:]
print(ans)

s = input()
print("Yes" if s[:4] == "YAKI" else "No")

t = int(input())
for i in range(t):
    m,s = map(int,input().split())
    print(m // s)

a, b, c, d = map(int,input().split())
ans = min(a, c) * max(a, c) + min(b, d) * max(b, d)
print(ans)

n = int(input())
if(n%5 == 0 and n%11 != 0 or n%11 == 0 and n%5 != 0):
    print("ONE")
elif(n%5 == 0 and n%11 == 0):
    print("BOTH")
else:
    print("NONE")

a = int(input())
b = int(input())
c = int(input())
l = [a, b, c]
list.sort(l)
print(l[1])

n = int(input())
if(n%5 == 0 or n%6 == 0):
    print("YES")
else:
    print("NO")

n = int(input())
a = map(int,input().split())
a = list(a)
list.reverse(a)
a = str(a)
a = a.replace("[","")
a = a.replace("]","")
a = a.replace(", "," ")
print(a)

n = int(input())
print(n**2, n**2+n)

s = input()
print(s.count("ZONe"))

l, r = map(int,input().split())
for i in range(l, r + 1):
    if i%2 != 0:
        print(i, end=" ")

t = int(input())
for i in range(t):
    r, b, d = map(int,input().split())
    print("YES" if(min(r, b) * (d + 1) >= max(r, b)) else "NO")

class maths:
    def power(n, m):
        return pow(n, m)
    def square(n):
        return n**2
    def squareRoot(n):
        return n**0.5
    def cube(n):
        return n**3

n, k = map(int,input().split())
for i in range(n):
    a = map(int,input().split())
    if(k in a):
        print(1)
    else:
        print(-1)

t = int(input())
for i in range(t):
    l, b = map(int,input().split())
    print(l - b)

class Node:
    def __init__(self, data):
        self.data = data
        self.right = None
        self.left = None
    def insert(self, data):
        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node(data)
                else:
                    self.left.insert(data)
            elif data > self.data:
                if self.right is None:
                    self.right = Node(data)
                else:
                    self.right.insert = Node(data)
            else:
                self.data = data
    def display(self):
        if self.left():
            self.left.display()
        print(self.data)
        if self.right():
            self.right.display()
root = Node(20)

x, y = map(float,input().split())
if(x % 5 == 0 and x < y):
    print(y - x - 0.50)
else:
    print(y)

l = [1, 2, 3]
def reverse(n):
    return l[::-1]
print(reverse(l))

n, m = map(int,input().split())
print(n*m//2)

x = int(input())
print(x // 4)

t = int(input())
for i in range(t):
    m, s = map(int,input().split())
    print(m // s)

t = int(input())
for i in range(t):
    x, y, z = map(int,input().split())
    l = [x, y, z]
    list.sort(l)
    if(l[0] + l[1] == l[2]):
        print("YES")
    else:
        print("NO")

r = int(input())
if r>=1 and r<=50:
    print(100)
elif r>= 51 and r<=100:
    print(50)
else:
    print(0)

n = int(input())
A=[]
for i in range(1, n + 1):
    if n%i == 0:
        A.append(i)
print(len(A))
print(*A)

s = input()
t = input()
n = len(s)
ans = 0
for i in range(n):
    if s[i] != t[i]:
        ans += 1
print(ans)

i = int(input())
s = input()
if s[:i//2] == s[i//2:]:
    print("Yes")
else:
    print("No")

t = int(input())
for i in range(t):
    x, a, b = map(int,input().split())
    ans = (a + (100 - x) * b) * 10
    print(ans)

t = int(input())
for i in range(t):
    a, b, c = map(int,input().split())
    s = (a + 1)%c
    if b%c == 0 or b%c == s:
        print("YES")
    else:
        print("NO")

n = int(input())
if n%100==0:
    print(n // 100)
else:
    print(n // 100+1)

n, k = map(int,input().split())
for i in range(k):
    if n%200 == 0:
        n = n // 200
    else:
        n = str(n) + "200"
        n = int(n)
print(n)

h1, m1, h2, m2, k = map(int,input().split())
print(60 * (h2 - h1) + m2 - m1 - k)

n = int(input())
ans = pow(10, n)
print(ans + 7)

u, l = input().split()
if l == u.lower() and u == l.upper():
    print("Yes")
else:
    print("No")

s = input()
print(s.replace("Left", "<").replace("Right", ">").replace("AtCoder", "A"))

n = int(input())
print((9 / 5 * n) + 32)

n = int(input())
print("Blue" if n%2 == 0 else "Red")

x = input()
s = input()
print(s.replace(x, ""))

s =  input()
ans = s[0].upper() + s[1:].lower()
print(ans)

a, b = map(int,input().split())
ans = a * (max(a, b) + min(a, b)) * b
if ans >= 1:
    print("Positive")
elif ans == 0:
    print("Zero")
else:
    print("Negative")

n = int(input())
b = []
for i in range(n):
    a = int(input())
    b.append(a)
print(min(b))

t = input()
s = input()
if t[::-1] == s:
    print("YES")
else:
    print("NO")

n = int(input())
a = list(map(int,input().split()))
list.sort(a)
print(*a)

a, b = map(int,input().split())
ans = str(a) + str(b)
ans = int(ans)
c = ans**0.5
c = int(c)
if c**2 == ans:
    print("Yes")
else:
    print("No")

s = input()
sum_s = sum(int(i) for i in s)
print("Yes" if int(s) % sum_s == 0 else "No")

s = input()
n = ""
for i in range(len(s)):
    if i % 2 == 0:
        n = n + s[i]
print(n)

print(input().replace("4", "5"))

n = int(input())
a = list(map(int,input().split()))
print(abs(max(a) - min(a)))

arr = [1, 2, 6, 78]
for i in range(len(arr)):
    print(arr[i])

n=int(input())
S=[]
for i in range(n):
    x,y=input().split()
    S.append([int(y),x])
S.sort()
print(S[-2][1])

n = int(input())
ans = n**0.5
ans = int(ans)
print(ans**2)

while True:
    n = int(input())
    if n == 42:
        break
    print(n)

a, b, c = map(int,input().split())
a, b = b, a
a = a*c
b = c+b
print(a, b)

a, b, c = map(int,input().split())
print(21-a-b-c)

s = input()
s = s[::-1]
ans=""
for ele in s:
    if ele=="9":
        ans+="6"
    elif ele=="6":
        ans+="9"
    else:
           ans+=ele
print(ans)

a, b, k = map(int,input().split())
ans = "b"*(b//2) + "a"*a + "b"*(b//2)
total = "b"*b + "a"*a
if len(ans) <= 32:
    print(ans)
else:
    print(total)

n, a, b = map(int,input().split())
print(n-a+b)

n = int(input())
if n%2 == 0:
    print("White")
else:
    print("Black")

n = int(input())
print(n)

n = int(input())
if n%6 == 0 or n%5 == 0:
    print("YES")
else:
    print("NO")

s = input()
i = len(s) - 2
if s[i] == "7":
    print(1)
else:
    print(0)

n = int(input())
l = list(map(int,input().split()))
print(*l[::-1])

n, k = map(int,input().split())
a = list(map(int,input().split()))
if k in a:
    print(1)
else:
    print(-1)

n = int(input())
if n%3 == 0 and n%2 != 0:
    print(1)
elif n%2 == 0 and n%3 == 0:
    print(0)
else:
    print(-1)

a = int(input())
b = int(input())
c = int(input())
l = []
l.append(a)
l.append(b)
l.append(c)
l.sort()
print(l[1])

n = input()
if n[::-1] == n:
    print("YES")
else:
    print("NO")

from math import gcd
a, b = map(int,input().split())
def lcm(a,b):
    return (a // gcd(a,b))* b
print(gcd(a, b), lcm(a, b))

s = input()
l = []
for ele in s:
    l.append(int(ele))
    ans = sum(l)
s = int(s)
if s%ans == 0:
    print("Yes")
else:
    print("No")

def binarySearch(a, low, high, key):
    while low<=high:
        mid = (low+high)//2
        if a[mid]<key:
            low=mid+1
        elif a[mid]>key:
            high=mid-1
        else:
            return mid
    return -1
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(binarySearch(a, 0, 9, 10))

def selectionSort(a, n):
    minimum = 0
    for i in range(n-1):
        minimum = i
        for j in range(i+1, n):
            if(a[j] < a[minimum]):
                minimum = j
        a[minimum], a[i] = a[i], a[minimum]
arr = [9, 3, 6, 1]
n = len(arr)
selectionSort(arr, n)
print(arr)

s = input()
ans = ""
for ele in s:
    if ele.isupper():
        ans+=ele.replace(ele.upper(), ele.lower())
    else:
        ans+=ele.replace(ele.lower(), ele.upper())
print(ans)

n, m = map(int,input().split())
a = list(map(int,input().split()))
a.sort()
print(sum(a[:m]))

a, b, c = map(int,input().split())
if a == c:
    print(b)
elif a == b:
    print(c)
elif b == c:
    print(a)
else:
    print(0)

l = []
n, m = map(int,input().split())
for i in range(n, m+1):
    if i%2 != 0:
        l.append(i)
print(*l)

import math
t=int(input())
for i in range(t):
    n = int(input())
    print(math.factorial(n))

t = int(input())
for i in range(t):
    s = input()
    print(int(s[0]) + int(s[-1]))

t = int(input())
l = []
for i in range(t):
    n = int(input())
    l.append(n)
    l.sort()
for j in range(len(l)):
    print(l[j])

t = int(input())
l = []
for i in range(t):
    n = int(input())
    l.append(n)
    l.sort()
s = f"{l}"
s = s.replace("[", "")
s = s.replace("]", "")
s = s.replace(",", "")
s = s.replace(" ", "\n")
print(s)

t = int(input())
for i in range(t):
    s = input()
    print(s.count("4"))

t = int(input())
for i in range(t):
    n = int(input())
    print(int(n**0.5))

t = int(input())
for i in range(t):
    n = int(input())
    if n<10:
        print("Thanks for helping Chef!")
    else:
        print(-1)

t = int(input())
s = input().split()
lst1 = []
lst2 = []
for ele in s:
    ele = int(ele)
    if ele%2 == 0:
        lst1.append(ele)
    else:
        lst2.append(ele)
if len(lst1) > len(lst2):
    print("READY FOR BATTLE")
else:
    print("NOT READY")

t = int(input())
for i in range(t):
    s = input()
    print("wins" if s[::-1] == s else "loses")

n1 = int(input())
n2 = int(input())
if n1 > n2:
    print(n1-n2)
else:
    print(n1+n2)

t = int(input())
for i in range(t):
    s = input().upper()
    if s == "B":
        print("BattleShip")
    elif s == "C":
        print("Cruiser")
    elif s == "D":
        print("Destroyer")
    else:
        print("Frigate")

from math import gcd
t = int(input())
for i in range(t):
    a, b = map(int,input().split())
    def lcm(a,b):
        return (a // gcd(a,b))* b
    print(gcd(a, b), lcm(a, b))

s = input()
l = len(s)
print(l if l <= 3 else "More than 3 digits")

t = int(input())
for _ in range(t):
    l = [2010, 2015, 2016, 2017, 2019]
    n = int(input())
    if n in l:
        ans = "HOSTED"
    else:
        ans = "NOT HOSTED"
    print(ans)

t = int(input())
for i in range(t):
    x, x2, xa, xb = map(int,input().split())
    ans = xa // x
    ans2 = xb // x2
    print(ans+ans2)

t = int(input())
l = []
ans = 0
for _ in range(t):
    a = input().split()
    ans = a.count("1")
    if ans == 0:
        print("Beginner")
    elif ans == 1:
        print("Junior Developer")
    elif ans == 2:
        print("Middle Developer")
    elif ans == 3:
        print("Senior Developer")
    elif ans == 4:
        print("Hacker")
    else:
        print("Jeff Dean")

t = int(input())
for _ in range(t):
    ans = 0
    D, d, P, Q = map(int,input().split())
    for i in range(D):
        ans+=(P+(i//d)*Q)
    print(ans)

t = int(input())
l = []
k = []
h = []
for _ in range(t):
    n, m = map(int,input().split())

t = int(input())
for i in range(t):
    n, m = map(int,input().split())
    s = input()
    if s.count("**") >= 1:
        print("YES")
    else:
        print("NO")

t = int(input())
for i in range(t):
    a, b, c = map(int,input().split())
    n = a*b
    m = b+c
    k = min(a*b, a+c)
    l = a*b
    o = b+c
    print(min(n, m, k, l, o))

a = int(input())
b, c = map(int,input().split())
s = input()
print(a+b+c, s)

x, y = map(int,input().split())
print(x if x == y else 3-x-y)

n = int(input())
A = list(map(int,input().split()))
ans = 0
for a in A:
    if a>10:
        ans += a - 10
print(ans)

n, k = map(int,input().split())
ans = 0
for i in range(1, n+1):
    for j in range(1, k+1):
        ans += 100*i + j
print(ans)

def push(a, n):
    a.append(n)
def pop(a):
    if isEmpty(a):
        return False
    else:
        a.pop()
def isEmpty(n):
    if not n:
        return True
    else:
        return False
def top(n):
    return n[0]
def isFull(m):
    if len(m)>=1:
        return True
    else:
        return False

t = int(input())
l = []
for i in range(t):
    r, n = input().split()
    l.append([n])
c = int(input())
for j in range(c):
    b = int(input())
    print(l[b-1][0])

a = int(input())
b = int(input())
c = str(a-b)
d = str(a*b)
e = str(a+b)
ans = c+d+e
print(ans)

n = int(input())
s = input().split()
l = []
cnt = ''
for i in range(len(s)):
    ans = s[i]
    d = ans[-1]
    cnt += d
print("Yes" if int(cnt)%10 == 0 else "No")

t = int(input())
l = []
for i in range(t):
    a, b = map(int,input().split())
    cnt = 0
    if a > b:
        cnt = a-b
    else:
        cnt = b-a
    l.append(cnt)
ans = max(l)
idx = l.index(ans)
print(idx+1, ans)

a = list(map(int,input().split()))
k = int(input())
l = []
for i in range(len(a)):
    if a[i] == k:
        pass
    else:
        l.append(a[i])
print(len(l), l)

n = int(input())
def solve(n):
    if n%2 == 0 and n>2:
        return "YES"
    else:
        return "NO"
print(solve(n))

t = int(input())
for _ in range(t):
    s = input()
    def solve(s):
        ans = ''
        if len(s) > 10:
            ans = s[0] + str(len(s)-2) + s[-1]
            return ans
        return s
    print(solve(s))
'''
a, b = map(int,input().split())
print((a*b)//2)