/* -*- 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 as[3] = {}; for (int i = BN - 1, bi = 1 << i; i >= 0; i--, bi >>= 1) if (bi <= m) { if (as[0] == 0) as[0] = as[1] = bi; else if (as[2] == 0 && (as[0] | bi) <= m) as[0] |= bi, as[2] = bi; else if ((as[1] | bi) <= m) as[1] |= bi, as[2] |= bi; } //printf(" %d %d %d\n", as[0], as[1], as[2]); ll s = (ll)m * (n - 3) + as[0] + as[1] + as[2]; printf("%lld\n", s); return 0; }