#include using namespace std; #define int long long #define db double #define gcd(a,b) __gcd(a,b) #define lcm(a,b) a*b / __gcd(a,b) #define I first #define II second #define pb push_back #define ii pair const int INF = 2 * 1e18; const int N = 3e5 + 1; const int MOD = 1e9 + 7; int n, k; void solve() { cin >> n >> k; if (n == 1 || k == 0) cout << 0; else if (n % 2 == 0) cout << n * k; else { int cnt = 0; for (int i = 30; i >= 0; i--) if ((k >> i) & 1) { int x = k; x ^= (1 << i); int ok = 0; for (int j = i - 1; j >= 0; j--) { if ((k >> j) & 1) ok = 1; if (ok) x ^= (1 << j); } int y = k ^ x; // cout << x << ' ' << y << '\n'; cout << max((n - 1) * k, k * (n - 2) + x + y); return ; } cout << (n - 1) * k; } } int32_t main() { #define TASKNAME "test" ios_base::sync_with_stdio(0); cin.tie(0); if (fopen(TASKNAME ".inp","r" )) { freopen(TASKNAME ".inp","r",stdin); freopen(TASKNAME ".out","w",stdout); } int t = 1; // cin >> t; while (t--) solve(); return 0; }