#include #include #include #include #include #include using namespace std; unordered_map mp; long long solve(long n, long m) { if (mp[n*m]) return mp[n*m]; long long count = 0ll, tmp; for (int i = 1; i <= n - 1; ++i) if ((tmp = 1 + solve(n - i, m) + solve(i, m)) > count) count = tmp; for (int i = 1; i <= m - 1; ++i) if ((tmp = 1 + solve(n, m - i) + solve(n, i)) > count) count = tmp; return mp[n*m] = count; } int main() { long n, m; cin >> n >> m; cout << solve(n, m); return 0; }