#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;
int ktcp (long long x)
{
long long so=sqrt(x);
if (so*so==x) return 1;
else return 0;
}
int kt (long long x)
{
for (long long i=1; i<=sqrt(x); i++)
{
if (x%i==0)
{
if (ktcp(i)==1 && sqrt(i)>1) return 0;
if (ktcp(x/i)==1 && sqrt(x/i)>1) return 0;
}
}
return 1;
}
int main ()
{
long long n;
cin>>n;
vector <long long> uoc;
for (long long i=1; i<=sqrt (n); i++)
{
if (n%i==0)
{
if (i!=sqrt (n))
{
uoc.push_back(i);
uoc.push_back(n/i);
}
else
{
if (ktcp(n)==1)
{
uoc.push_back(i);
}
else
{
uoc.push_back(i);
uoc.push_back(n/i);
}
}
}
}
sort (uoc.begin(), uoc.end());
for (long long i=uoc.size()-1; i>=0; i--)
{
if (kt(uoc[i])==1)
{
cout<<uoc[i];
break;
}
}
return 0;
}