#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
typedef long long ll;
const ll INF = 1LL << 50;
int solve();
ll gcd(ll p, ll q) {
if (q == 0) { return p; }
return gcd(q, p%q);
}
int main(void) {
while (solve()) {}
return 0;
}
int solve() {
ll p, q, g;
cin >> p >> q;
g = gcd(max(p, q), min(p, q));
// 約分
p = p / g;
q = q / g;
// エラトステネスの篩
const ll M = sqrt(10e9) + 1;
std::vector< bool > isPrime(M, true);
isPrime[1] = false;
for (ll i = 2; i < M; i++) {
if (isPrime[i] == false) { continue; }
for (ll j = i; i * j < M; j++) {
isPrime[i*j] = false;
}
}
ll ans = 1;
for (ll i = 2; i < M; i++) {
if (q % i == 0 && isPrime[i] == true ) {
ans *= i;
}
}
if( q > 1 && ans == 1 ) { ans = q;}
cout << ans << endl;
return 0;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNtYXRoPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmNvbnN0IGxsIElORiA9IDFMTCA8PCA1MDsKCmludCBzb2x2ZSgpOwoKbGwgZ2NkKGxsIHAsIGxsIHEpIHsKCWlmIChxID09IDApIHsgcmV0dXJuIHA7IH0KCXJldHVybiBnY2QocSwgcCVxKTsKfQoKaW50IG1haW4odm9pZCkgewoJd2hpbGUgKHNvbHZlKCkpIHt9CglyZXR1cm4gMDsKfQoKaW50IHNvbHZlKCkgewoKCWxsIHAsIHEsIGc7CgoJY2luID4+IHAgPj4gcTsKCglnID0gZ2NkKG1heChwLCBxKSwgbWluKHAsIHEpKTsKCgkvLwnntITliIYKCXAgPSBwIC8gZzsKCXEgPSBxIC8gZzsKCgkvLwnjgqjjg6njg4jjgrnjg4bjg43jgrnjga7nr6kKCgljb25zdCBsbCBNID0gc3FydCgxMGU5KSArIDE7CglzdGQ6OnZlY3RvcjwgYm9vbCA+IGlzUHJpbWUoTSwgdHJ1ZSk7Cglpc1ByaW1lWzFdID0gZmFsc2U7CgoJZm9yIChsbCBpID0gMjsgaSA8IE07IGkrKykgewoJCWlmIChpc1ByaW1lW2ldID09IGZhbHNlKSB7IGNvbnRpbnVlOyB9CgkJZm9yIChsbCBqID0gaTsgaSAqIGogPCBNOyBqKyspIHsKCQkJaXNQcmltZVtpKmpdID0gZmFsc2U7CgkJfQoJfQoKCWxsIGFucyA9IDE7Cglmb3IgKGxsIGkgPSAyOyBpIDwgTTsgaSsrKSB7CgkJaWYgKHEgJSBpID09IDAgJiYgaXNQcmltZVtpXSA9PSB0cnVlICkgewoJCQlhbnMgKj0gaTsKCQl9Cgl9CgoJaWYoIHEgPiAxICYmIGFucyA9PSAxICkgeyBhbnMgPSBxO30KCQoJCgljb3V0IDw8IGFucyA8PCBlbmRsOwoKCglyZXR1cm4gMDsKfQ==