/**********
author:chanjun2016
email:15755396353@163.com
***********/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
#define INF = 0x3f3f3f3f
#define ll long long
const int maxn = 3e5;
int ext[maxn + 10];
int p[maxn],tot;
ll n;
void prime(){
tot = 0;
for (int i = 2; i < maxn; ++i){
if (!ext[i]){
p[++tot] = i;
}
for (int j = 1; j <= tot && i * p[j] < maxn; ++j){
ext[i * p[j]] = 1;
if (i % p[j] == 0){
break;
}
}
}
}
int gcd(int a, int b){
if (!b){
return a;
}
return gcd(b, a % b);
}
int solve(){
ll nn = n;
if (n < 0){
n = -n;
}
int ans = 0;
for (int i = 1; i <= tot && p[i] <= n; ++i){
int count = 0;
while (n % p[i] == 0){
++count;
n /= p[i];
}
ans = gcd(ans,count);
}
if (ans == 0){
ans = 1;
}
if (nn < 0){
while (ans % 2 == 0){
ans /= 2;
}
}
return ans;
}
int main(){
prime();
//printf("%d\n",gcd(0,6));
while (scanf("%lld",&n),n){
printf("%d\n",solve());
}
return 0;
}