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