#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,m;
int fx[3]={1,-1,2};
bool vis[N]={};
struct data{
int x,cnt;
};
int bfs(){
queue<data> q;
q.push({n,0});
vis[n]=true;
while (q.size()){
data t=q.front();
q.pop();
int x=t.x,step=t.cnt;
if (x==m) return step;
for (int i=0;i<3;i++){
int nx;
if (fx[i]==2) nx=x*fx[i];
else nx=x+fx[i];
if (nx>=0&&nx<=N&&!vis[nx]){
q.push({nx,step+1});
vis[nx]=true;
}
}
}
return -1;
}
int main(){
cin >> n >> m;
cout << bfs();
return 0;
}