1 #include<cstdio>
2 #include<cstdlib>
3 #include<cmath>
4 #include<cstring>
5 #include<algorithm>
6 #include<iostream>
7 #include<vector>
8 #include<map>
9 #include<set>
10 #include<queue>
11 #include<string>
12 #define inf 1000000000
13 #define maxn 200000+1000
14 #define maxm 400000
15 #define eps 1e-10
16 #define ll long long
17 #define pa pair<int,int>
18 using namespace std;
19 inline int read()
20 {
21 int x=0,f=1;char ch=getchar();
22 while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
23 while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}
24 return x*f;
25 }
26 struct edge{int go,next,w;}e[2*maxm];
27 int n,s,t,tot,q[maxn],d[maxn],head[maxn];
28 bool v[maxn];
29 void ins(int x,int y)
30 {
31 e[++tot].go=y;e[tot].next=head[x];head[x]=tot;
32 }
33 void insert(int x,int y)
34 {
35 ins(x,y);ins(y,x);
36 }
37 void spfa()
38 {
39 for(int i=0;i<=n;++i) d[i]=inf;
40 memset(v,0,sizeof(v));
41 int l=0,r=1,x,y;q[1]=s;d[s]=0;
42 while(l!=r)
43 {
44 x=q[++l];if(l==maxn)l=0;v[x]=0;
45 for(int i=head[x];i;i=e[i].next)
46 if(d[x]+1<d[y=e[i].go])
47 {
48 d[y]=d[x]+1;
49 if(!v[y]){v[y]=1;q[++r]=y;if(r==maxn)r=0;}
50 }
51 }
52
53 }
54 int main()
55 {
56 freopen("input.txt","r",stdin);
57 freopen("output.txt","w",stdout);
58 s=read();t=read();
59 if(s>=t){printf("%d\n",abs(t-s));return 0;}
60 else n=t+abs(t-s)+1;
61 for(int i=0;i<n;i++)insert(i,i+1);
62 for(int i=1;i<=n/2;i++)ins(i,i<<1);
63 spfa();
64 printf("%d\n",d[t]);
65 return 0;
66 }