#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MOD = pow(10, 9) + 7;
//const int MOD = 998244353;
//const int MOD = ;
int mod(int A, int M) {return (A % M + M) % M;}
const int INF = 1LL << 60;
const string ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const string abc = "abcdefghijklmnopqrstuvwxyz";
template <class T> bool chmin(T& a, T b) {if (a > b) {a = b; return true;} return false;}
template <class T> bool chmax(T& a, T b) {if (a < b) {a = b; return true;} return false;}
int divCeil(int A, int B) {return (A + (B - 1)) / B;}
int myctoi(char C) {return C - 48;}
char myitoc(int N) {return '0' + N;}
signed main()
{
int H, W;
cin >> H >> W;
int ans = INF;
for (int i = 1; i < H; i++)
{
int S0 = i * W;
int S1 = (H - i) * (W / 2);
int S2 = H * W - S0 - S1;
chmin(ans, max({S0, S1, S2}) - min({S0, S1, S2}));
int S3 = ((H - i) / 2) * W;
int S4 = H * W - S0 - S3;
chmin(ans, max({S0, S3, S4}) - min({S0, S3, S4}));
}
swap(H, W);
for (int i = 1; i < H; i++)
{
int S0 = i * W;
int S1 = (H - i) * (W / 2);
int S2 = H * W - S0 - S1;
chmin(ans, max({S0, S1, S2}) - min({S0, S1, S2}));
int S3 = ((H - i) / 2) * W;
int S4 = H * W - S0 - S3;
chmin(ans, max({S0, S3, S4}) - min({S0, S3, S4}));
}
cout << ans << endl;
}