Problem: You are given two integers n and k. Find k-th smallest divisor of n, or report that it doesn't exist.

Divisor of n is any such natural number, that n can be divided by it without remainder.

Input

The first line contains two integers n and k (1 ≤ n ≤ 1015, 1 ≤ k ≤ 109).

Output

If n has less than k divisors, output -1.

Otherwise, output the k-th smallest divisor of n.

Examples

Input

4 2


Output

2


Input

5 3


Output

-1


Input

12 5


Output

6

Note

In the first example, number 4 has three divisors: 1, 2 and 4. The second one is 2.

In the second example, number 5 has only two divisors: 1 and 5. The third divisor doesn't exist, so the answer is -1.

Solution (in JAVA):

Solution:
import java.util.Scanner;
import java.util.Stack;

public class A_762 {
    static Scanner sc = new Scanner(System.in);
    static long n;
    static long k;

    public static void main(String[] args) {
        getNK();
        long res = getKDiv();
        System.out.println(res);
    }

    private static long getKDiv() {
        if( k > n){
            return -1;
        }

        Stack<Long> dividers = new Stack<>();
        dividers.push(1L);
        long candidate = 2;

        while(dividers.size() < k && candidate <= (int) (Math.sqrt(n))){
            if(n % candidate == 0){
                dividers.push(candidate);
            }
            ++candidate;
        }

        if(dividers.size() == k){
            return dividers.peek();
        }else{
            
            int count = dividers.size();
            candidate = dividers.pop();
            if( candidate == n / candidate){
                if(dividers.isEmpty())     return  -1;
                candidate = dividers.pop();
            }
            ++count;
            if(count == k) return n / candidate;
           
            if(k - count > dividers.size()) return -1;
            else{
                Long divider =  0L;
                for(int i = 0; i < k - count; ++ i){
                    divider = dividers.pop();
                }
                return n / divider;
            }
        }

    }

    private static void getNK() {
        String [] data = sc.nextLine().split(" ");
        n = Long.parseLong(data[0]);
        k = Long.parseLong(data[1]);
    }
}