#include <iostream>
#include <ccomplex>
#include <vector>
#include <cassert>
#include <utility>
#include <algorithm>
#include <string>
#include <deque>
#include <queue>
#include <functional>
#include <cmath>
#include <iomanip>
#include <map>
#include <numeric>
#include <list>
#include <assert.h>
#include <math.h>
#include <valarray>
#include <stdio.h>
#include <algorithm>
#include <set>
#include <complex>
#include <list>
#include <time.h>
#include <stack>
#include <locale>
#include <clocale>
#include <ctype.h>
#include <wchar.h>
#include <random>
#include <vector>
#include <unordered_map>
#include <bitset>

using namespace std;
typedef long long int LL;
typedef long long int ll;
typedef pair<long long int, long long int> pii;
typedef pair<double, double> pdd;

#define SORT(c) sort((c).begin(),(c).end())
#define BACKSORT(c) sort((c).begin(),(c).end(),std::greater<LL>())
#define FOR(i,a,b) for(LL i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)

int main()
{
  cin.tie(0);
  ios::sync_with_stdio(false);

  LL N, P;
  cin >> N >> P;

  LL m = 0;

  if(N==1){
    cout << P << endl;
  }else
  if(N==2){

  FOR(i,1,1000001){
    LL j = i * i;
    if (j > P)
    {
      break;
    }

    if(P%j==0){
      m=i;
    }
  }

  cout << m << endl;
  }else
  if(N==3){

  FOR(i,1,10001){
    LL j = i * i*i;
    if (j > P)
    {
      break;
    }

    if(P%j==0){
      m=i;
    }
  }
  cout << m << endl;
  }else
  if(N==4){

  FOR(i,1,10001){
    LL j = i * i*i*i;
    if (j > P)
    {
      break;
    }

    if(P%j==0){
      m=i;
    }
  }
  cout << m << endl;
  }else
  if(N==5){

  FOR(i,1,10001){
    LL j = i * i*i*i*i;
    if (j > P)
    {
      break;
    }

    if(P%j==0){
      m=i;
    }
  }
  cout << m << endl;
  }else
  if(N==6){

  FOR(i,1,10001){
    LL j = i * i*i*i*i*i;
    if (j > P)
    {
      break;
    }

    if(P%j==0){
      m=i;
    }
  }
  cout << m << endl;
  }else
  if(N==7){

  FOR(i,1,10001){
    LL j = i * i*i*i*i*i*i;
    if (j > P)
    {
      break;
    }

    if(P%j==0){
      m=i;
    }
  }
  cout << m << endl;
  }else
  if(N==8){

  FOR(i,1,10001){
    LL j = i * i*i*i*i*i*i*i;
    if (j > P)
    {
      break;
    }

    if(P%j==0){
      m=i;
    }
  }
  cout << m << endl;
  }else
  if(N==9){

  FOR(i,1,10001){
    LL j = i * i*i*i*i*i*i*i*i;
    if (j > P)
    {
      break;
    }

    if(P%j==0){
      m=i;
    }
  }
  cout << m << endl;
  }else
  if(N==10){

  FOR(i,1,10001){
    LL j = i * i*i*i*i*i*i*i*i*i;
    if (j > P)
    {
      break;
    }

    if(P%j==0){
      m=i;
    }
  }
  cout << m << endl;
  }else
  if(N==11){

  FOR(i,1,10001){
    LL j = i * i*i*i*i*i*i*i*i*i*i;
    if (j > P)
    {
      break;
    }

    if(P%j==0){
      m=i;
    }
  }
  cout << m << endl;
  }else
  if(N==12){

  FOR(i,1,10001){
    LL j = i * i*i*i*i*i*i*i*i*i*i*i;
    if (j > P)
    {
      break;
    }

    if(P%j==0){
      m=i;
    }
  }
  cout << m << endl;
  }else{
    LL ans = 1;
    LL cnt = 0;
    while (P % 2 == 0)
    {
      P /= 2;
      cnt++;
      if(cnt>=N){
        cnt = 0;
        ans *= 2;
      }
    }
    cnt = 0;
    while (P % 3 == 0)
    {
      P /= 3;
      cnt++;
      if(cnt>=N){
        cnt = 0;
        ans *= 3;
      }
    }
    cnt = 0;
    while (P % 5 == 0)
    {
      P /= 5;
      cnt++;
      if(cnt>=N){
        cnt = 0;
        ans *= 5;
      }
    }
    cnt = 0;
    while (P % 7 == 0)
    {
      P /= 7;
      cnt++;
      if(cnt>=N){
        cnt = 0;
        ans *= 7;
      }
    }
    cout << ans << endl;
  }
}


Measured memory_bytes: 256