/* -*- coding: utf-8 -*- * * 3254.cc: No.3254 Xor, Max and Sum - yukicoder */ #include #include using namespace std; /* constant */ const int BN = 30; /* typedef */ using ll = long long; /* global variables */ /* subroutines */ /* main */ int main() { int n, m; scanf("%d%d", &n, &m); if (n == 1) { puts("0"); return 0; } if (! (n & 1)) { printf("%lld\n", (ll)m * n); return 0; } int a0 = 0, a1 = 0; for (int i = BN - 1; i >= 0; i--) { int bi = 1 << i; if (m & bi) { if (a0 <= 0) a0 |= bi; else a1 |= bi; } else { if (a1 > 0) a0 |= bi, a1 |= bi; } } ll s = (ll)m * (n - 2) + a0 + a1; printf("%lld\n", s); return 0; }