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

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

    ans = 0

else:

    ans = min( max((H//3+1)*W, (H//3)*W)- min((H//3+1)*W, (H//3)*W),  max((W//3+1)*H, (W//3)*H)- min((W//3+1)*H, (W//3)*H))

    for i in range(H+1):

        ans = min( ans, max(W*i, (H-i)*(W//2), (H-i)*(W - W//2)) - min(W*i, (H-i)*(W//2), (H-i)*(W - W//2)))

    for j in range(W+1):

        ans = min( ans, max(H*j, (W-j)*(H//2), (W-j)*(H - H//2)) - min(H*j, (W-j)*(H//2), (W-j)*(H - H//2)))

print(ans)
#import sys

#input = sys.stdin.readline

def main():

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

    ans = min(H,W)

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

        ans = 0

    for i in range(1,H):

        L = [W*i]

        L.append(W//2*(H-i))

        if W%2 == 1:

            L.append((W//2+1)*(H-i))

        if max(L) - min(L) < ans:

            ans = max(L) - min(L)

    for i in range(1,W):

        L = [H*i]

        L.append(H//2*(W-i))

        if H%2 == 1:

            L.append((H//2+1)*(W-i))

        if max(L) - min(L) < ans:

            ans = max(L) - min(L)

    print(ans)

if __name__ == '__main__':

    main()

H, W = list(map(int, input().split()))
if H % 3 == 0 or W % 3 == 0:
    ans = 0
else:
    ans = min(
        max((H // 3 + 1) * W, (H // 3) * W) - min((H // 3 + 1) * W, (H // 3) * W),
        max((W // 3 + 1) * H, (W // 3) * H) - min((W // 3 + 1) * H, (W // 3) * H),
    )
    for i in range(H + 1):
        ans = min(
            ans,
            max(W * i, (H - i) * (W // 2), (H - i) * (W - W // 2))
            - min(W * i, (H - i) * (W // 2), (H - i) * (W - W // 2)),
        )
    for j in range(W + 1):
        ans = min(
            ans,
            max(H * j, (W - j) * (H // 2), (W - j) * (H - H // 2))
            - min(H * j, (W - j) * (H // 2), (W - j) * (H - H // 2)),
        )
print(ans)

# import sys
# input = sys.stdin.readline
def main():
    H, W = list(map(int, input().split()))
    ans = min(H, W)
    if H % 3 == 0 or W % 3 == 0:
        ans = 0
    for i in range(1, H):
        L = [W * i]
        L.append(W // 2 * (H - i))
        if W % 2 == 1:
            L.append((W // 2 + 1) * (H - i))
        if max(L) - min(L) < ans:
            ans = max(L) - min(L)
    for i in range(1, W):
        L = [H * i]
        L.append(H // 2 * (W - i))
        if H % 2 == 1:
            L.append((H // 2 + 1) * (W - i))
        if max(L) - min(L) < ans:
            ans = max(L) - min(L)
    print(ans)


if __name__ == "__main__":
    main()

-H, W = list(map(int, input().split())) -if H % 3 == 0 or W % 3 == 0: -    ans = 0 -else: -    ans = min( -        max((H // 3 + 1) * W, (H // 3) * W) - min((H // 3 + 1) * W, (H // 3) * W), -        max((W // 3 + 1) * H, (W // 3) * H) - min((W // 3 + 1) * H, (W // 3) * H), -    ) -    for i in range(H + 1): -        ans = min( -            ans, -            max(W * i, (H - i) * (W // 2), (H - i) * (W - W // 2)) -            - min(W * i, (H - i) * (W // 2), (H - i) * (W - W // 2)), -        ) -    for j in range(W + 1): -        ans = min( -            ans, -            max(H * j, (W - j) * (H // 2), (W - j) * (H - H // 2)) -            - min(H * j, (W - j) * (H // 2), (W - j) * (H - H // 2)), -        ) -print(ans) +# import sys +# input = sys.stdin.readline +def main(): +    H, W = list(map(int, input().split())) +    ans = min(H, W) +    if H % 3 == 0 or W % 3 == 0: +        ans = 0 +    for i in range(1, H): +        L = [W * i] +        L.append(W // 2 * (H - i)) +        if W % 2 == 1: +            L.append((W // 2 + 1) * (H - i)) +        if max(L) - min(L) < ans: +            ans = max(L) - min(L) +    for i in range(1, W): +        L = [H * i] +        L.append(H // 2 * (W - i)) +        if H % 2 == 1: +            L.append((H // 2 + 1) * (W - i)) +        if max(L) - min(L) < ans: +            ans = max(L) - min(L) +    print(ans) + + +if __name__ == "__main__": +    main()