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.4.3) (judge verdict: Wrong Answer)

import sys

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

A = 0
B = 0
C = 0
Aw = 0
Bw = 0
Cw = 0
Ah = 0
Bh = 0
Ch = 0
Sa = 0
Sb = 0
Sc = 0
Smax = 0
Smin = 0
Sm = 0

#1
Aw = W//3
Bw = (W - Aw) // 2
Cw = Aw - Bw
if Aw == Bw and Bw == Cw:
    print(0)
    sys.exit()
else:
    Sm = (max([Aw,Bw,Cw]) - min([Aw,Bw,Cw])) * H

#2
Ah = H//3
Bh = (H - Ah) // 2
Ch = H - Ah - Bh
if Ah == Bh and Bh == Ch:
    print(0)
    sys.exit()
else:
    if (max([Ah,Bh,Ch]) - min([Ah,Bh,Ch])) * W < Sm:
        Sm = (max([Ah,Bh,Ch]) - min([Ah,Bh,Ch])) * W

#3
Ah = H//2
Bh = H - Ah
Ch = H
for i in range(W):
    Aw = i
    Bw = i
    Cw = W - Aw
    Sa = Ah * Aw
    Sb = Bh * Bw
    Sc = Ch * Cw
    Smax = max([Sa,Sb,Sc])
    Smin = min([Sa,Sb,Sc])
    if Smax - Smin < Sm:
        Sm = Smax - Smin
    if Sm == 0:
        print(0)
        sys.exit()

#4
Aw = W//2
Bw = W - Aw
Cw = W
for j in range(H):
    Ah = j
    Bh = j
    Ch = H - Ah
    Sa = Ah * Aw
    Sb = Bh * Bw
    Sc = Ch * Cw
    Smax = max([Sa,Sb,Sc])
    Smin = min([Sa,Sb,Sc])
    if Smax - Smin < Sm:
        Sm = Smax - Smin
    if Sm == 0:
        print(0)
        sys.exit()

print(Sm)