#include <climits>
#include <iostream>
#include <vector>
using namespace std;
//求约数
void get_y(vector<int>& v, int x) {
for(int i = 2; i * i <= x; i++) {
if(x % i == 0) {
v.push_back(i);
if(x / i != i)
v.push_back(x / i);
}
}
}
int jump(int n, int m) {
vector<int> step(m + 1, INT_MAX);
step[n] = 0;//初始化第一个位置
for(int i = n; i < m; i++) {
if(step[i] == INT_MAX) continue;
vector<int> v;//存约数
get_y(v, i);
for(int j = 0; j < v.size(); j++) {
//如果不是第一次到这里
if(i + v[j] <= m && step[i + v[j]] != INT_MAX) {
//新的和旧的比较谁的步数少
step[i + v[j]] = step[i + v[j]] > step[i] + 1 ? step[i] + 1 : step[i + v[j]];
}
else if(i + v[j] <= m) {
//如果是第一次来就直接赋值
step[i + v[j]] = step[i] + 1;
}
}
}
//如果该位置被赋值,证明找到了,返回该位置的值即可
return step[m] == INT_MAX ? -1 :step[m];
}
int main() {
int n, m, min_step;
cin >> n >> m;
min_step = jump(n, m);
cout << min_step << endl;
return 0;
}