#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef vector vi; typedef pair pii; #define MP make_pair #define PB push_back #define inf 1000000007 #define rep(i,n) for(int i = 0; i < (int)(n); ++i) #define all(x) (x).begin(),(x).end() template void Fill(A (&array)[N], const T &val){ std::fill( (T*)array, (T*)(array+N), val ); } template inline bool chmax(T &a, T b){ if(a inline bool chmin(T &a, T b){ if(a>b){ a = b; return true; } return false; } #define MAX_N 200005 vector prime; bool is_prime[MAX_N]; void sieve(int n){ for(int i=0;i<=n;i++){ is_prime[i] = true; } is_prime[0] = is_prime[1] = false; for(int i=2;i<=n;i++){ if(is_prime[i]){ if(i>100000)prime.push_back(i); for(int j=2*i;j<=n;j+=i){ is_prime[j] = false; } } } } int main(){ sieve(120000); int n; cin >> n; if(n==1)cout << 1 << endl; else{ n--; vector p; for(auto x:prime){ for(auto y:prime){ p.push_back(x*y); } } sort(all(p)); p.erase(unique(all(p)),p.end()); sort(all(p)); cout << p[n-1] << endl; } return 0; }