//[SDOI]反素数
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define M(a) memset(a,0,sizeof a)
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
int p[20]={0,2,3,5,7,11,13,17,19,23,29,31,37};
ll pow[20][50],t;
int n,ans;
inline void dfs(int dep,int num,ll now,int last) //num:因子个数
{
int i,j,k;
if(now>n || dep>12) return;
if(now>ans && num>t) ans=now,t=num;
if(now<=ans && num>=t) ans=now,t=num;
fo(j,0,last)
{
if(num*(j+1)>n || !pow[dep][j]) break;
dfs(dep+1,num*(j+1),now*pow[dep][j],j);
}
}
int main()
{
int i,j;
scanf("%d",&n);
fo(i,1,12) pow[i][0]=1;
fo(i,1,12) //第i个质数的j次方
fo(j,1,36)
{
pow[i][j]=pow[i][j-1]*p[i];
if(pow[i][j]>n) break;
}
dfs(1,1,1,32);
printf("%d\n",ans);
return 0;
}