Problem:
Score : 400 points

Problem Statement

There is a bar of chocolate with a height of H blocks and a width of W blocks.
Snuke is dividing this bar into exactly three pieces.
He can only cut the bar along borders of blocks, and the shape of each piece must be a rectangle.

Snuke is trying to divide the bar as evenly as possible.
More specifically, he is trying to minimize S_{max} - S_{min}, where S_{max} is the area (the number of blocks contained) of the largest piece, and S_{min} is the area of the smallest piece.
Find the minimum possible value of S_{max} - S_{min}.

Constraints

2 ≤ H, W ≤ 10^5

Input

Input is given from Standard Input in the following format:

H W

Output

Print the minimum possible value of S_{max} - S_{min}.

Sample Input 1

3 5

Sample Output 1

0

In the division below, S_{max} - S_{min} = 5 - 5 = 0.

Sample Input 2

4 5

Sample Output 2

2

In the division below, S_{max} - S_{min} = 8 - 6 = 2.

Sample Input 3

5 5

Sample Output 3

4

In the division below, S_{max} - S_{min} = 10 - 6 = 4.

Sample Input 4

100000 2

Sample Output 4

1

Sample Input 5

100000 100000

Sample Output 5

50000

Solution in Python (3.8.2) (judge verdict: Wrong Answer)

import sys
input = sys.stdin.readline

H,W = list(map(int,input().split()))
target_num = H*W/3
ans = 10**10
H1 = H
W1 = W
#H方向で探す
for i in range( H//3-1, H//3+2):
    s = i*W
    if abs(target_num - s) <= ans:
        if abs(target_num - s) == ans and (H-i)%2 == 0:
            ans = abs(target_num - s)
            H1 = i
            W1 = W
        else:
            ans = abs(target_num - s)
            H1 = i
            W1 = W

            
#W方向で探す
for i in range( W//3-1, W//3+2):
    s = i*H
    if abs(target_num - s) <= ans:
        if abs(target_num - s) == ans and (W-i)%2 == 0:
            ans = abs(target_num - s)
            H1 = H
            W1 = i
        else:
            ans = abs(target_num - s)
            H1 = H
            W1 = i
        
#探し終わった。
s1 = H1*W1
nokori = H*W - s1
H = H1 if H == H1 else H-H1
W = W1 if W == W1 else W-W1
#半分にする

target_num = H*W/2
ans = 10**10
H2 = 0
W2 = 0
#H方向で探す
for i in range( H//2-1, H//2+2):
    s = i*W
    if abs(target_num - s) < ans:
        ans = abs(target_num - s)
        H2 = i
        W2 = W
#W方向で探す
for i in range( W//2-1, W//2+2):
    s = i*H
    if abs(target_num - s) < ans:
        ans = abs(target_num - s)
        H2 = H
        W2 = i
#探し終わった。
s2 = H2*W2
nokori = H*W - s2
H = (H-H1)
W = (W-W1)


print(max(s1,s2,nokori)-min(s1,s2,nokori))