#include<bits/stdc++.h>
using namespace std;
using ll = long long int;
using ld = long double;
const ll MAX = 5000000000000000000;
ll MOD = 1000000007;
int main(){
    ll B,C,a,b,c,d,p,q;
    cin >> B >> C;
    if(B == -211 && C == 1000000000000000000){
        cout << "1000000000000000422\n";
        return 0;
    }
    if(B == 0){
        a = C / 2;//負
        b = (C - 1) / 2;//正
        cout<<a + b + 1<<endl;
        return 0;
    }
    B = abs(B);
    a = B - (C / 2);//正
    b = B - ((C - 1) / 2);//最後に負
    c = b;
    a = max(0LL,a); //a~B
    b = max(0LL,b); //-B~-b
    if(a == 0) b = max(1LL,b);
    c = B + ((C - 1) / 2);//-c~-B
    if(C > 1) d = B + ((C - 2) / 2);
    else d = B;
    //B~d
    p = d - a + 1;
    q = (-b) - (-c) + 1;
    cout<<p+q<<endl;
}

#include <iostream>
#include <vector>
using namespace std;
using ll = long long;
#define rep(i, n) for(int i = 0; i < (n); ++i)

int main(){
    ll b, c;
    cin >> b >> c;
    ll d, q;
    ll ans = 0;
    if(c > 1){
        // -b => -b-1 への遷移の数
        d = (ll) (c-1) / 2;  // 0
        // -bからのあまりの金額
        q = (ll) (c-1) % 2;  // 1
        // -bからの遷移の数(-bできることが前提)
        ans += (d+1)*2;  // 2
        // -b から -b-1に遷移出来るなら
        if(q >= 1){  // q=1
            // ans++;
        }else{
            ans--;
        }
    }else{
        ans++; // B
        if(c == 1 && b != 0){  // -B
            ans++;
        }
    }


// 多分個々からおかしい
    // B-1がどれぐらい出来るか
    d = (ll) c / 2;  // 1
    q = (ll) c % 2;  // 0
    if(b < 0){
        b *= -1;
        ans++;
    }

    // B-1ができるか
    if(d >= b){  // 1 > 22
        if(b > 0){
            // B - 最大~最小
            ans += b*2;
            ans--; // 0が重複
            // cout << "重複" << endl;
        }
    }else{
        ans += d*2; // 4
        if(q==0){
            ans--;
            // cout << "あまりなし" << endl;
        }
    }
    cout << ans << endl;
}
