#include<bits/stdc++.h>
using namespace std;
long long n;
long long ans;
long long prime[3000010];
bool is_no_p[3000010];
long long maxx;
void Prime()
{
long long n=1000;
for (long long i=2;i<=n;i++)
{
if (!is_no_p[i]) prime[++prime[0]]=i;
for (long long j=1;j<=prime[0] && i*prime[j]<=n;j++)
{
is_no_p[i*prime[j]]=1;
if (i%prime[j] == 0) break;
}
}
}
long long ksm(long long x,long long y)
{
long long cnt=1;
while(y)
{
if (y&1) cnt*=x;
x*=x;
y>>=1;
}
return cnt;
}
void dfs(long long x,long long num,long long id,__int128 sum)
{
if(id>maxx || (id == maxx && x<ans))
{
ans=x;
maxx=id;
}
long long k=x;
for (int i=1;i<=sum;i++)
{
if (n/k<prime[num]) return;
k*=prime[num];
if (k<=n) dfs(k,num+1,id*(i+1),i);
}
}
inline void read(long long &x)
{
char ch=getchar();long long f=1;x=0;
while(!isdigit(ch) && ch^'-') ch=getchar();
if(ch=='-') f=-1,ch=getchar();
while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
x*=f;
}
inline void write(long long x)
{
if(x<0)x*=-1,putchar('-');
if(x>9)write(x/10);
putchar(x%10+'0');
return;
}
int main()
{
Prime();
read(n);
dfs(1,1,1,30);
cout << ans << endl;
return 0;
}