#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
    if (b == 0) {
        return a;
    } else {
        return gcd(b, a % b);
    }
}
long long lcm2(long long a, long long b) {
    long long d = gcd(a, b);
    return a / d * b;
}
long long lcm(const vector<long long> &vec) {
    long long l = vec[0];
    for (int i = 0; i < vec.size() - 1; i++) {
        l = lcm2(l, vec[i + 1]);
    }
    return l;
}
long long int mypow(long long int a,long long int b){
    long long int i=0,ans;
    for(i=0;i<b;i++)
    {
        if(i==0)
        {
            ans=a;
        }
        else
        {
            ans*=a;
        }
    }
    return ans;   
}
struct UnionFind{
    int n;
    vector<int> par; // 親の番号
    vector<int> siz; // サイズを表している。

    // 初期化する。parは自身を指す（iotaは 0 ~ nまでの数字を順に入れていく）
    // size(siz) は最初はすべて１
    UnionFind(int n) : n(n){
        par.resize(n);
        iota(par.begin(),par.end(),0);
        siz.assign(n,1);
    }

    // 頂点の親を求める。
    // 再帰関数を使っており、経路圧縮もしている。
    int root(int x){
        // ここは親の処理。
        if (par[x] == x){
            return x;
        }

        //経路圧縮をしながら値を返す。
        // par[x] = root(par[x]);
        // return par[x];
        // と同じ意味。
        return par[x] = root(par[x]);
    }

    // unite :: a と bを同じグループに入れる。
    // もし初めから同じなら何もしない。
    void unite(int a,int b){
        int ra = root(a);
        int rb = root(b);

        if(ra == rb){
            return;
        }

        // サイズの大きい方にサイズの小さいほうを合成するので、swapしている。
        if (siz[ra] < siz[rb]){
            swap(ra,rb);
        }
        // サイズが大きい方に小さいのを合体
        // 小さいほうの親は大きい方の親になる。
        siz[ra] += siz[rb];
        par[rb] = ra;
    }

    //　同じグループかどうか判定するには、親が一緒かどうかをみたらよい
    bool same(int x,int y){
        return root(x) == root(y);
    }

    // 頂点が含まれるグループの頂点を求める。
    int get_size(int x){
        return siz[root(x)];
    }
};
    long long int facctorialMethod(int k){
    long long int sum = 1;
    for (int i = 1; i <= k; ++i)
    {
        sum *= i;
    }
    return sum;
}
#define PI 3.14159265359
int main()
{
	[[maybe_unused]]long long int i=0,j=0,b,c,n=0;
    [[maybe_unused]]double ab,bc;
    string s1;
    cin >> b >> c;
    if(b<0)
    {
        n=1;
    }
    b=abs(b);
    if(b==0)
    {
        cout << c;
    }
    else if(b*2+2>=c && c>=3 && n==1)
    {
        cout << (c-2)*2+3;
        return 0;
    }
    else if(b*2>=c && c>=3 && n==0)
    {
        cout << (c-2)*2+3;
        return 0;
    }
    else if(b*2+2<c && c>=3 && n==1)
    {
        cout << b*2+c;
        return 0;
    }
    else if(b*2<c && c>=3 && n==0)
    {
        cout << b*2+c-1;
        return 0;
    }
    else
    {
        cout << c+1;
    }
    return 0;
}
#include <cstdio>
#include <algorithm>
long long b, c;
int main() {
    scanf("%lld%lld", &b, &c);
    if(b == 0) printf("%lld", (c-1)/2 + 1 + c/2);
    else if(b > 0) printf("%lld", std::min(c/2, b) + std::min((c-1)/2, b-1) + (c-1)/2 + 1 + std::max(c/2-1, 0ll) + 1);
    else printf("%lld", std::min(std::max(c/2-1, 0ll), -b-1) + std::min((c-1)/2+1, -b+1) + 1 + c/2 + (c-1)/2);
    return 0;
}