#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
long long n;
int main() {
  scanf("%I64d", &n);
  vector<long long> sz;
  for (long long i = 1; i * i <= n; i++) {
    if ((n % i) == 0) {
      sz.push_back(i);
      if (i != n / i) {
        sz.push_back(n / i);
      }
    }
  }
  n = sz.size();
  for (long long j = 0; j < sz.size(); j++) {
    for (long long i = 2; i * i <= sz[j]; i++) {
      if ((sz[j] % (i * i)) == 0) {
        sz.erase(sz.begin() + j);
        j--;
        break;
      }
    }
  }
  long long _max = *max_element(sz.begin(), sz.end());
  printf("%I64d\n", _max);
  return 0;
}
