#include <bits/stdc++.h>
using llint = long long;
using VI = std::vector<llint>;
using PII = std::pair<llint, llint>;
using SI = std::set<llint>;
using MII = std::map<llint, llint>;
using TIII = std::tuple<llint, llint, llint>;
using MCI = std::map<char, llint>;
using VPII = std::vector<PII>;
using namespace std;
llint N, P;
MII fact;
void makeFact() {
  llint n = P;
  for (llint(i) = (llint)(2); (i * i <= P); ++(i)) {
    while (n % i == 0) n /= i, fact[i]++;
  }
  if (n != 1) fact[n]++;
}
llint solve() {
  llint ans = 1;
  for (PII p : fact)
    if (p.second >= N) ans *= p.first;
  return ans;
}
signed main() {
  cin >> N >> P;
  makeFact();
  cout << solve() << endl;
  return 0;
}
