#include<bits/stdc++.h>
using namespace std;
int n,m;
int fx[3]={-1,1,2};
long long a[1999999];
struct Node{
	int x,step;
};
queue<Node> q;
int main(){
    cin>>n>>m;
    q.push({n,0});
    while(!q.empty()){
    	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>=1&&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});
    	q.pop();
    }
	return 0;
}

/**************************************************************
	Problem: 2111
	User: zengdongxin
	Language: C++
	Result: Accepted
	Time:57 ms
	Memory:17704 kb
****************************************************************/