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 C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

const int maxn = 1e5 - 1;
const long long MAXN = 1e10;
long long x,y;

void Slove(){
	long long xx,yy,sum1,sum2,sum3,ma_x,mi_n,ans,tot = MAXN;
	xx = min(x,y);
	yy = max(x,y);
	for(int i = 1;i <= maxn;i++){
		sum1 = i * xx;
		sum2 = (yy - i) * (xx / 2);
		sum3 = xx * yy - (sum1 + sum2);
		ma_x = max(sum1,sum2) , ma_x = max(ma_x,sum3);
		mi_n = min(sum1,sum2) , mi_n = min(mi_n,sum3);
		ans = ma_x - mi_n;
		tot = min(tot,ans);
	}
	printf("%lld\n",tot);
}

int main(){
	scanf("%lld %lld",&x,&y);
	if(x % 3 == 0 || y % 3 == 0) printf("0\n");
	else Slove();
}