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;

    }
    
}