#include<bits/stdc++.h>
using namespace std;
int n,m;
struct Node{
long long x,step;
};
queue<Node> q;
int a[1000000];
int main(){
cin>>n>>m;
q.push({n,0});
while(q.size()>0){
a[n]=1;
long long x=q.front().x;
long long step=q.front().step;
if(x+1==m){
cout<<step+1;
return 0;
}
else {
if(a[x+1]==0){
a[x+1]=1;
q.push({x+1,step+1});
}
}
if(x-1==m){
cout<<step+1;
return 0;
}
else {
if(a[x-1]==0){
a[x-1]=1;
q.push({x-1,step+1});
}
}
if(x*2==m){
cout<<step+1;
return 0;
}
else {
if(a[x*2]==0){
a[x*2]=1;
q.push({x*2,step+1});
}
}
q.pop();
}
return 0;
}
/**************************************************************
Problem: 2111
User: chenjingqi
Language: C++
Result: Runtime Error
****************************************************************/