#include<iostream>
#include<math.h>
#include<vector>

using namespace std;

const int MAXN = 1e6;

bool isPrime[MAXN];    //辅助数组

vector<int> prime;   //定义向量,存放质数

void Initial(){
	for(int i = 0; i < MAXN; ++i){
		isPrime[i] = true;     //默认将区间内的所有数都初始化为质数
	}
	isPrime[0] = false;
	isPrime[1] = false;
	for(int i = 2; i < MAXN; ++i) {
		if(!isPrime[i]) {    //非质数直接跳过
			continue;
		}
		prime.push_back(i);    //质数入向量
		if(i > MAXN / i) {
			continue;
		}
		for(int j = i * i; j < MAXN; j += i) {    //质数的倍数是非质数
			isPrime[j] = false;
		}
	}		
}

int main() {
	int k;  
	while(scanf("%d",&k) != EOF){
		Initial();
		printf("%d\n",prime[k-1]);  //直接输出第k个质数即可,这里注意以下下标与位序的关系
	}
	return 0;
}