Problem:
Score : 300 points

Problem Statement

There are N integers a_1, a_2, ..., a_N not less than 1.
The values of a_1, a_2, ..., a_N are not known, but it is known that a_1 \times a_2 \times ... \times a_N = P.

Find the maximum possible greatest common divisor of a_1, a_2, ..., a_N.

Constraints

1 \leq N \leq 10^{12}

1 \leq P \leq 10^{12}

Input

Input is given from Standard Input in the following format:

N P

Output

Print the answer.

Sample Input 1

3 24

Sample Output 1

2

The greatest common divisor would be 2 when, for example, a_1=2, a_2=6 and a_3=2.

Sample Input 2

5 1

Sample Output 2

1

As a_i are positive integers, the only possible case is a_1 = a_2 = a_3 = a_4 = a_5 = 1.

Sample Input 3

1 111

Sample Output 3

111

Sample Input 4

4 972439611840

Sample Output 4

206

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>
#include <cmath>
#include<vector>
using namespace std;

long ans=0;
vector<int> yakusu;

void saiki(long long ct,long n,long p);

int main() {
    //std::cout << "Hello, World!" << std::endl;
long n,p,n2=0,i;
cin>>n>>p;

for(i=1;i<=p;i++){
    if(p%i==0){
        yakusu.push_back(i);
        n2++;
    }
}

   saiki(pow(n2,n)-1,n,n2);

cout << ans << endl;
    return 0;
}

void saiki(long long ct,long n,long p) {
   // cout << ct << endl;
    if (ct < 0)return;
    long ans2, temp = 1, i, j, ctt = ct;
    bool flg = true;
    vector<long> a(n, 0);
    vector<bool> yakusu2(yakusu[p - 1], true);
    for (i = 0; i < n; i++) {
        a[i] = ctt % p;
        ctt -= ctt % p;
        ctt /= p;
        temp = temp * yakusu[a[i]];
        //cout << yakusu[a[i]] << endl;

        //  if(temp>p)saiki(ct-1,n,p);
    }
    if (temp != p)flg = false;

    if (flg) {
    for (i = 0; i < n; i++) {
        for (j = 1; j <= yakusu[p - 1]; j++) {
            if (yakusu[a[i]] % j != 0)yakusu2[j] = false;
        }
    }
    for (i = yakusu[p - 1]; i >= 0; i--) {
        if (yakusu2[i]) {
            ans2 = i;
            break;
        }
    }
    if (ans2 >= ans)ans = ans2;
    /* for(i=0;i<n;i++)cout << a[i] <<',';
     cout<<' '<<endl;*/

}
saiki(ct-1,n,p);
}