1 #include<iostream>
2 #include<cstring>
3 #include<algorithm>
4 #include<cmath>
5 #include<cstdio>
6 #include<queue>
7 using namespace std;
8
9 struct node{
10 int n,step;
11 node(){};
12 node(int n,int step){
13 this->n=n;
14 this->step=step;
15 }
16 };
17
18 int bfs(int n,int k){
19 if(!k)
20 return n;
21 queue<node>q;
22 q.push(node(n,0));
23 bool vis[100005];
24 memset(vis,0,sizeof(vis));
25 vis[n]=1;
26 while(!q.empty()){
27 node t=q.front();q.pop();
28 if(t.n==k)
29 return t.step;
30 if(t.n>k){
31 if(!vis[t.n-1]&&t.n-1>=0){
32 q.push(node(t.n-1,t.step+1));
33 vis[t.n-1]=1;
34 }
35 }
36 else{
37 int a=t.n-1,b=t.n+1,c=t.n*2,step=t.step+1;
38 if(a>=0&&!vis[a]){
39 q.push(node(a,step));
40 vis[a]=1;
41 }
42 if(!vis[b]&&b<100005){
43 q.push(node(b,step));
44 vis[b]=1;
45 }
46 if(c<100005&&!vis[c]){
47 q.push(node(c,step));
48 vis[c]=1;
49 }
50 }
51 }
52
53 }
54
55 int main(){
56 int n,k;
57 while(cin>>n>>k){
58 cout<<bfs(n,k)<<endl;
59 }
60 }