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.io.BufferedInputStream;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.*;


@SuppressWarnings("unused")
public class Main {

    public static void main(String[] args) throws IOException {

//		long startTime = new Date().getTime();

        InputReader in = new InputReader(System.in);
//		InputReader in = new InputReader(new FileInputStream(new File("simple.in")));

        PrintWriter writer = new PrintWriter(System.out);
//		PrintWriter writer = new PrintWriter("simple.out");

        solveTheProblem(in, writer);

//		long endTime = new Date().getTime();
//		System.err.println("Time: " + (endTime - startTime) + " millis");

    }

    public static void solveTheProblem(InputReader in, PrintWriter writer) throws IOException {

        long n = in.nl();
        long k = in.nl();

        long res = -1;

        Set<Long> f = new TreeSet<>();
        long i = 1;
        while (i <= Math.floor(Math.sqrt(n))) {
            if (n % i == 0) {
                f.add(i);
                f.add(n / i);
            }
            i++;
        }

        if (f.size() >= k) {
            Iterator<Long> it = f.iterator();
            for (int j = 0; j < k - 1; j++) it.next();
            writer.println(it.next());
        } else {
            writer.println(-1);
        }

        // don't forget partial flushes!
        writer.flush();

    }

    /** Utils **/

    private static final long MOD = (long) Math.pow(10, 9)+7;

    private static long mod(long n) {
        return n % MOD;
    }

    private static int pow(int n, int p) {
        return (int) Math.pow(n, p);
    }

    private static long pow(long n, long p) {
        return (long) Math.pow(n, p);
    }

    private static class BIT {

        private int n;
        private long[] freqs;
        private long[] cumulativeFreqs;

        public BIT(int n) {
            this.n = n;
            this.freqs = new long[n];
            this.cumulativeFreqs = new long[n];
        }

        public void add(int idx, long v) {

            this.freqs[idx] = mod(this.freqs[idx] + v);

            int i = idx;
            while (i < n) {

                this.cumulativeFreqs[i] = mod(this.cumulativeFreqs[i] + v);

                int lastDigit = i & -i;
                i += lastDigit;

            }

        }

        public long getCumulativeSum(int idx) {

            long ans = 0;

            int i = idx;
            while (i > 0) {

                ans = mod(ans + this.cumulativeFreqs[i]);

                int lastDigit = i & -i;
                i -= lastDigit;

            }

            return ans;
        }

    }

    private static String joinWithSpaces(Object... a) {
        StringBuilder str = new StringBuilder();
        if (a.length > 0) {
            str.append(a[0]);
            for (int i = 1; i < a.length; i++) {
                str.append(' ');
                str.append(a[i]);
            }
        }
        return str.toString();
    }

    private static String joinWithSpaces(long[] a) {
        StringBuilder str = new StringBuilder();
        if (a.length > 0) {
            str.append(a[0]);
            for (int i = 1; i < a.length; i++) {
                str.append(' ');
                str.append(a[i]);
            }
        }
        return str.toString();
    }

    private static int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a % b);
    }

    private static long gcd(long a, long b) {
        return b == 0 ? a : gcd(b, a % b);
    }

    private static boolean[] createPrimeSieve(int n) {
        boolean[] sieve = new boolean[n+1];
        Arrays.fill(sieve, true);
        for (int i = 2; i <= n; i++) {
            if (sieve[i]) {
                for (int j = i+i; j <= n; j += i)
                    sieve[j] = false;
            }
        }
        return sieve;
    }

    private static int countPrimes(boolean[] sieve) {
        int ans = 0;
        for (int i = 2; i < sieve.length; i++)
            if (sieve[i]) ans++;
        return ans;
    }

    public static class InputReader implements Closeable {

        //		private InputStream in;
        private Scanner in;
        private StringBuilder sb = new StringBuilder();

//		public InputReader(File file) throws FileNotFoundException {
//			this(new FileInputStream(file));
//		}
//
//		public InputReader(InputStream wrapped) {
//			this.in = new BufferedInputStream(wrapped);
//		}

        public InputReader(InputStream wrapped) {
            this.in = new Scanner(wrapped);
        }

        @Override
        public void close() throws IOException {
            this.in.close();
        }

        public int ni() throws IOException {
//			sb.setLength(0);
//		mainloop:
//			for (;;) {
//				int b = this.in.read();
//				while (b == -1 || !((b >= '0' && b <= '9') || b == '-')) {
//					if (sb.length() > 0) break mainloop;
//					else b = this.in.read();
//				}
//				sb.append((char) b);
//			}
//			return new Integer(sb.toString());
            return in.nextInt();
        }

        public String nstr() throws IOException {
//			sb.setLength(0);
//			int ans = 0;
//		mainloop:
//			for (;;) {
//				int b = this.in.read();
//				while (b == -1 || !((b >= 'a' && b <= 'z') || (b >= 'A' && b < 'Z'))) {
//					if (sb.length() > 0) break mainloop;
//					else b = this.in.read();
//				}
//				sb.append((char) b);
//			}
//			return sb.toString();
            return in.next();
        }

        public long nl() throws IOException {
            return in.nextLong();
        }

        public char[] nca(int n) throws IOException {
            char[] ca = new char[n];
            String str = nstr();
            for (int i = 0; i < n; i++)
                ca[i] = str.charAt(i);
            return ca;
        }

    }

}