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 Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)

import java.util.*;
import static java.lang.Math.*;

public class Main {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		
		// 入力
		long h = sc.nextLong();
		long w = sc.nextLong();
		
		// 計算
		long result = 0;
		if(h%3 != 0 && w%3 != 0){
		    long S1 = (h/3)*w;
		    result = minS(h - h/3, w, S1);
		    S1 = ((h+2)/3)*w;
		    result = min(result, minS(h - (h+2)/3, w, S1));
		    S1 = h*(w/3);
		    result = min(result, minS(h, w - w/3, S1));
		    S1 = h*((w+2)/3);
		    result = min(result, minS(h, w - (w+2)/3, S1));
		}
		
		// 出力
		System.out.println(result);
	}
	
	static long minS(long h, long w, long S1){
	    long S2 = max((h/2)*w, h*(w/2));
	    long S3 = h*w - S2;
	    return max(S1, max(S2, S3)) - min(S1, min(S2, S3));
	}
}