#include <bits/stdc++.h>
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("O2")
#pragma GCC optimization("unroll-loops")
using namespace std;
void read() { return; }
void wrt() { cout << (string) "\n"; }
void wrt(long long t) { cout << t; }
void wrt(int t) { cout << t; }
void wrt(char t) { cout << t; }
void wrt(string t) { cout << t; }
void wrt(double t) { cout << t; }
template <class T>
void wrt(set<T> v);
template <class T>
void wrt(vector<T> v);
template <class T>
void wrt(multiset<T> v);
template <class T, class V>
void wrt(map<T, V> v);
template <class T, class V>
void wrt(pair<T, V> p);
template <class T>
void wrt(set<T> v) {
  for (T i : v) {
    wrt(i);
    wrt(' ');
  }
  wrt();
}
template <class T>
void wrt(vector<T> v) {
  for (T i : v) {
    wrt(i);
    wrt(' ');
  }
  wrt();
}
template <size_t T>
void wrt(const char (&a)[T]) {
  for (char c : a) {
    wrt(c);
  }
  wrt();
}
template <class T>
void wrt(multiset<T> v) {
  for (T i : v) {
    wrt(i);
    wrt(' ');
  }
  wrt();
}
template <class T, class... V>
void wrt(T x, V... args) {
  (wrt(x), wrt(' '), wrt(args...));
}
template <class T, class V>
void wrt(map<T, V> v) {
  for (auto i : v) {
    wrt(i);
    wrt(' ');
  }
  wrt();
}
template <class T, class V>
void wrt(pair<T, V> p) {
  wrt(p.first);
  wrt(' ');
  wrt(p.second);
  wrt();
}
template <class T, class... V>
void read(T &x, V &...args) {
  ((cin >> x), read(args...));
}
template <class T>
void readArr(T &arr, int x, int y) {
  for (int i = (int)x; i < (int)y; ++i) cin >> arr[i];
}
const int N = 1e6;
const int INF = 1e9;
const int MOD = 1e9 + 7;
string S(string s) { return s; }
int countBits(long long number) { return (int)log2(number) + 1; }
long long gcd(long long a, long long b) {
  return (b == 0) ? (a) : (gcd(b, a %= b));
}
long long lcd(long long a, long long b) { return (a * b) / gcd(a, b); }
long long add(long long x, long long y) { return (x + y) % MOD; }
long long sub(long long x, long long y) { return (x - y + MOD) % MOD; }
long long mul(long long x, long long y) { return (x * 1ll * y) % MOD; }
long long inv(long long p, long long q) {
  long long expo = MOD - 2;
  while (expo) {
    if (expo & 1) p = mul(p, q);
    q = mul(q, q), expo >>= 1;
  }
  return p;
}
long long power(long long x, long long y) {
  if (y == 0)
    return 1;
  else if (y % 2 == 0) {
    long long tmp = power(x, y / 2);
    return mul(tmp, tmp);
  }
  return mul(x, power(x, y - 1));
}
void solveTestCase() {
  long long n;
  read(n);
  long long ans = n;
  for (int i = (int)2; i < (int)sqrt(n) + 1; ++i)
    if (n % i == 0) {
      ans = gcd(ans, i);
      ans = gcd(ans, n / i);
    }
  wrt(ans);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  ;
  int t = 1;
  while (t--) solveTestCase();
  return 0;
}
