#include<assert.h>
//#include<bits/stdc++.h>
#include<ctype.h>
#include<cstring>
#include<errno.h>
#include<float.h>
#include<fstream>
#include<iomanip>
#include<iostream>
#include<limits.h>
#include<locale.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<strstrea>
#include<time.h>
#include<wchar.h>
#include<wctype.h>
#include<algorithm>
#include<bitset>
#include<cctype>
#include<cerrno>
#include<clocale>
#include<cmath>
#include<complex>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<deque>
#include<exception>
#include<fstream>
#include<functional>
#include<limits>
#include<list>
#include<map>
#include<iomanip>
#include<ios>
#include<iosfwd>
#include<iostream>
#include<istream>
#include<ostream>
#include<queue>
#include<set>
#include<sstream>
#include<stack>
#include<stdexcept>
#include<streambuf>
#include<string>
#include<utility>
#include<vector>
#include<cwchar>
#include<cwctype>
#include<complex.h>
#include<fenv.h>
#include<inttypes.h>
#include<stdbool.h>
#include<stdint.h>
#include<tgmath.h>
using namespace std;
struct node{
int data,rev,sum;
node *son[2],*pre;
bool judge();
bool isroot();
void pushdown();
void update();
void setson(node *child,int lr);
};
node lct[233];
int top;
int a_a1s;
int b_b1s;
node *getnew(int x)
{
node *now = lct+ ++top;
now->data = x;
now->pre = now->son[1] = now->son[0] = lct;
now->sum = 0;
now->rev = 0;
return now;
}
bool node::judge()
{
return pre->son[1] == this;
}
bool node::isroot()
{
if(pre == lct)
{
return true;
}
return !(pre->son[1] == this || pre->son[0] == this);
}
void node::pushdown()
{
if(this == lct || !rev)
{
return ;
}
swap(son[0],son[1]);
son[0]->rev ^= 1;
son[1]->rev ^= 1;
rev = 0;
}
void node::update()
{
sum = son[1]->sum + son[0]->sum + data;
}
void node::setson(node *child,int lr)
{
this->pushdown();
child->pre = this;
son[lr] = child;
this->update();
}
void rotate(node *now)
{
node *father = now->pre,*grandfa = father->pre;
if(!father->isroot())
{
grandfa->pushdown();
}
father->pushdown();
now->pushdown();
int lr = now->judge();
father->setson(now->son[lr^1],lr);
if(father->isroot())
{
now->pre = grandfa;
}
else
{
grandfa->setson(now,father->judge());
}
now->setson(father,lr^1);
father->update();now->update();
if(grandfa != lct)
{
grandfa->update();
}
}
void splay(node *now)
{
if(now->isroot())
{
return ;
}
for(;!now->isroot();rotate(now))
{
if(!now->pre->isroot())
{
now->judge() == now->pre->judge()?rotate(now->pre):rotate(now);
}
}
}
node *access(node *now)
{
node *last = lct;
for(;now != lct;last = now,now = now->pre)
{
splay(now);
now->setson(last,1);
}
return last;
}
void changeroot(node *now)
{
access(now)->rev ^= 1;
splay(now);
}
void connect(node *x,node *y)
{
changeroot(x);
x->pre = y;
access(x);
}
void cut(node *x,node *y)
{
changeroot(x);
access(y);
splay(x);
x->pushdown();
x->son[1] = y->pre = lct;
x->update();
}
int query_query19(node *x,node *y)
{
changeroot(x);
node *now = access(y);
return now->sum;
}
int main()
{
cin>>a_a1s>>b_b1s;
node *A=getnew(a_a1s);
node *B=getnew(b_b1s);
connect(A,B);
cut(A,B);
connect(A,B);
cout<<query_query19(A,B);
return 0;
}
区区亿点点而已啦