H, W = list(map(int, input().split()))



if H % 3 == 0 or W % 3 == 0:

    print((0))

    exit()





ans = H*W

# 高さを変えて調べる

for h in range(1, H+1):

    a = h*W

    #残りを高さで割る場合

    b = ((H-h)//2) * W

    c = H*W - a - b

    ans = min(ans, max([a,b,c]) - min([a,b,c]))





    #残りを幅で割る場合

    b = (H-h) * (W//2)

    c = H*W - a - b

    ans = min(ans, max([a,b,c]) - min([a,b,c]))







# 幅を変えて調べる

for w in range(1, W+1):

    a = H*w

    #残りを高さで割る場合

    b = (W-w) * (H//2)

    c = H*W - a - b

    ans = min(ans, max([a,b,c]) - min([a,b,c]))





    #残りを幅で割る場合

    b = ((W-w)//2) * H

    c = H*W - a - b

    ans = min(ans, max([a,b,c]) - min([a,b,c]))



print(ans)


H,W = list(map(int, input().split()))



ans = H * W



# 1つめは縦を1ずつ増やしていく場合

for h in range(1, H):

    a = h * W



    # 残りについて、縦で分割する場合

    b = ((H - h) // 2) * W

    c = H * W - a - b

    ans = min(ans, max(a,b,c) - min(a,b,c))

    



    # 残りについて、横で分割する場合

    b = (H - h) * (W // 2)

    c = H * W - a - b

    ans = min(ans, max(a,b,c) - min(a,b,c))

    



# 1つめは横を1ずつ増やしていく場合

for w in range(1, W):

    a = w * H



    # 残りについて、縦で分割する場合

    b = (W - w) * (H//2)

    c = H * W - a - b

    ans = min(ans, max(a,b,c) - min(a,b,c))

    



    # 残りについて、横で分割する場合

    b = ((W - w) // 2) * H

    c = H * W - a - b

    ans = min(ans, max(a,b,c) - min(a,b,c))

    



print(ans)
H, W = list(map(int, input().split()))
if H % 3 == 0 or W % 3 == 0:
    print((0))
    exit()
ans = H * W
# 高さを変えて調べる
for h in range(1, H + 1):
    a = h * W
    # 残りを高さで割る場合
    b = ((H - h) // 2) * W
    c = H * W - a - b
    ans = min(ans, max([a, b, c]) - min([a, b, c]))
    # 残りを幅で割る場合
    b = (H - h) * (W // 2)
    c = H * W - a - b
    ans = min(ans, max([a, b, c]) - min([a, b, c]))
# 幅を変えて調べる
for w in range(1, W + 1):
    a = H * w
    # 残りを高さで割る場合
    b = (W - w) * (H // 2)
    c = H * W - a - b
    ans = min(ans, max([a, b, c]) - min([a, b, c]))
    # 残りを幅で割る場合
    b = ((W - w) // 2) * H
    c = H * W - a - b
    ans = min(ans, max([a, b, c]) - min([a, b, c]))
print(ans)

H, W = list(map(int, input().split()))
ans = H * W
# 1つめは縦を1ずつ増やしていく場合
for h in range(1, H):
    a = h * W
    # 残りについて、縦で分割する場合
    b = ((H - h) // 2) * W
    c = H * W - a - b
    ans = min(ans, max(a, b, c) - min(a, b, c))
    # 残りについて、横で分割する場合
    b = (H - h) * (W // 2)
    c = H * W - a - b
    ans = min(ans, max(a, b, c) - min(a, b, c))
# 1つめは横を1ずつ増やしていく場合
for w in range(1, W):
    a = w * H
    # 残りについて、縦で分割する場合
    b = (W - w) * (H // 2)
    c = H * W - a - b
    ans = min(ans, max(a, b, c) - min(a, b, c))
    # 残りについて、横で分割する場合
    b = ((W - w) // 2) * H
    c = H * W - a - b
    ans = min(ans, max(a, b, c) - min(a, b, c))
print(ans)

-if H % 3 == 0 or W % 3 == 0: -    print((0)) -    exit() -# 高さを変えて調べる -for h in range(1, H + 1): +# 1つめは縦を1ずつ増やしていく場合 +for h in range(1, H): -    # 残りを高さで割る場合 +    # 残りについて、縦で分割する場合 -    ans = min(ans, max([a, b, c]) - min([a, b, c])) -    # 残りを幅で割る場合 +    ans = min(ans, max(a, b, c) - min(a, b, c)) +    # 残りについて、横で分割する場合 -    ans = min(ans, max([a, b, c]) - min([a, b, c])) -# 幅を変えて調べる -for w in range(1, W + 1): -    a = H * w -    # 残りを高さで割る場合 +    ans = min(ans, max(a, b, c) - min(a, b, c)) +# 1つめは横を1ずつ増やしていく場合 +for w in range(1, W): +    a = w * H +    # 残りについて、縦で分割する場合 -    ans = min(ans, max([a, b, c]) - min([a, b, c])) -    # 残りを幅で割る場合 +    ans = min(ans, max(a, b, c) - min(a, b, c)) +    # 残りについて、横で分割する場合 -    ans = min(ans, max([a, b, c]) - min([a, b, c])) +    ans = min(ans, max(a, b, c) - min(a, b, c))