1 #include<iostream>
2 #include<stdio.h>
3 #include<algorithm>
4 #include<string.h>
5 #include<math.h>
6 #define ll long long
7 #define inf 0x7f7f7f7f
8 #define il inline
9 #define fread(a) freopen (a".in", "r", stdin), freopen(a".out", "w", stdout)
10 using namespace std;
11 const ll a[]={2,3,5,7,11,13,17,19,23,29};
12 il ll read()
13 {
14 ll x=0,f=1;
15 char c=getchar();
16 while(c<'0' || c>'9') {if(c=='-') f=-1;c=getchar();}
17 while(c<='9' && c>='0') {x=x*10+c-'0';c=getchar();}
18 return x*f;
19 }
20 int n;
21 ll mx,x;
22 ll gcd(ll a,ll b)
23 {
24 if(!b) return a;
25 return gcd(b,a%b);
26 }
27 il ll mul(ll a,ll b,ll p)
28 {
29 ll tmp=(a*b-(ll)((long double)a/p*b+1e-8)*p);
30 return tmp<0?tmp+p:tmp;
31 }
32 il ll pow(ll a,ll b,ll p)
33 {
34 ll ans=1;a%=p;
35 while(b)
36 {
37 if(b&1) ans=mul(ans,a,p);
38 a=mul(a,a,p);
39 b>>=1;
40 }
41 return ans;
42 }
43 il bool check(ll a,ll n,ll r,ll s)
44 {
45 ll ans=pow(a,r,n),p=ans;
46 for(int i=1;i<=s;i++)
47 {
48 ans=mul(ans,ans,n);
49 if(ans==1 && p!=1 && p!=n-1) return 1;
50 p=ans;
51 }
52 if(ans!=1) return 1;
53 return 0;
54 }
55 il bool MR(ll n)
56 {
57 if(n<=1) return 0;
58 ll r=n-1,s=0;
59 while(r%2==0) r>>=1,s++;
60 for(int i=0;i<10;i++)
61 {
62 if(a[i]==n) return 1;
63 if(check(a[i],n,r,s)) return 0;
64 }
65 return 1;
66 }
67 il ll rho(ll n,ll c)
68 {
69 ll k=2,x=rand()%n,y=x,p=1;
70 for(ll i=1;p==1;i++)
71 {
72 x=(mul(x,x,n)+c)%n;
73 p=x>y ? x-y : y-x;
74 p=gcd(n,p);
75 if(i==k) y=x,k+=k;
76 }
77 return p;
78 }
79 void solve(ll n)
80 {
81 if(n==1) return;
82 if(MR(n)) {mx=max(mx,n);return;}
83 ll t=n;
84 while(t==n) t=rho(n,rand()%(n-1));
85 solve(t);solve(n/t);
86 }
87 int main()
88 {
89 // fread("t10");
90 while(scanf ("%lld", &x) != EOF)
91 {
92 mx=0;
93 solve(x);
94 if(mx == x) puts("YE5");
95 else printf("%lld\n",mx);
96 }
97 return 0;
98 }