#include <bits/stdc++.h>
using namespace std;
vector<unsigned long long> prime;
int main() {
  unsigned long long n, p;
  cin >> n >> p;
  prime.push_back(2);
  for (int i = 3; i <= 3500000; i += 2) {
    bool f = true;
    for (int j = 2; j <= (unsigned long long)sqrt(i); j++) {
      if (i % j == 0) {
        f = false;
        break;
      }
    }
    if (f) prime.push_back(i);
  }
  bool ff = true;
  for (auto i : prime) {
    if (p % i == 0 && p > i) {
      ff = false;
      break;
    }
  }
  if (ff) {
    if (n == 1) {
      cout << p;
    } else {
      cout << 1;
    }
    return 0;
  }
  unsigned long long q = 1;
  unsigned long long ind = 0;
  while (p != 1) {
    unsigned long long q0 = 0;
    if (ind >= prime.size()) {
      if (n == 1) {
        cout << p;
      } else {
        cout << 1;
      }
      return 0;
    }
    while (p % prime[ind] == 0) {
      p /= prime[ind];
      q0++;
    }
    ind++;
    unsigned long long prr = 1;
    for (int i = 0; i < q0 / n; i++) prr *= prime[ind - 1];
    q *= prr;
  }
  cout << q;
  return 0;
}
