#include <bits/stdc++.h>
using namespace std;
const long long N = 1e7;
long long n, c[N], tot, k;
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x *= 10;
    x += (ch - '0');
    ch = getchar();
  }
  return x * f;
}
inline void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
signed main() {
  n = read();
  k = read();
  for (register long long i = 1; i * i <= n; ++i)
    if (n % i == 0) {
      c[++tot] = i;
      k--;
      if (!k) {
        write(i);
        return 0;
      }
    }
  if (c[tot] * c[tot] == n) tot--;
  for (register long long(i) = (tot); (i) >= (1); --(i)) {
    k--;
    if (!k) {
      write(n / c[i]);
      return 0;
    }
  }
  write(-1);
  return 0;
}

### Prompt

Construct a cpp code solution to the problem outlined:

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.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const long long N = 1e7;
long long n, c[N], tot, k;
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x *= 10;
    x += (ch - '0');
    ch = getchar();
  }
  return x * f;
}
inline void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
signed main() {
  n = read();
  k = read();
  for (register long long i = 1; i * i <= n; ++i)
    if (n % i == 0) {
      c[++tot] = i;
      k--;
      if (!k) {
        write(i);
        return 0;
      }
    }
  if (c[tot] * c[tot] == n) tot--;
  for (register long long(i) = (tot); (i) >= (1); --(i)) {
    k--;
    if (!k) {
      write(n / c[i]);
      return 0;
    }
  }
  write(-1);
  return 0;
}

```