import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
//初始化一个数组,下标代表石板号,数组元素代表达到该石板的最小步数
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()){
int n = scanner.nextInt();
int m = scanner.nextInt();
int[] num = new int [m+1];//从1到m
//初始化数组元素位整数最大值
for(int i=0;i<=m;i++){
num[i] = Integer.MAX_VALUE;
}
//遍历数组,对数组元素进行赋值(到达的最小步数)
//从n开始
num[n] = 0;//让第一个为0
for(int i=n;i<m;i++){
//如果元素为最大值,就跳过
if(num[i]==Integer.MAX_VALUE){
continue;
}
//得到数组i下标的所有约数。然后给下标加约数的元素赋值
List<Integer> list = qiuyue(i);
for(int x: list){
//取最小
if(i+x<=m){
num[i+x] = Math.min(num[i+x],num[i]+1);
}
}
}
if(num[m]==Integer.MAX_VALUE){
System.out.println(-1);
}else {
System.out.println(num[m]);
}
}
}
public static List<Integer> qiuyue(int n ){
List<Integer> list = new ArrayList<>();
for(int i=2;i*i <= n;i++){//此处必须要用优化的求约数方法不然通过不了
if(n%i==0){
list.add(i);
if(n/i !=i){
list.add(n/i);
}
}
}
return list;
}
}