import java.util.ArrayList;
import java.util.List;

public class Euler7 {
    static List<Integer> sievePrimes(int limit) {
        boolean[] isPrime = new boolean[limit + 1];
        java.util.Arrays.fill(isPrime, true);
        isPrime[0] = isPrime[1] = false;
        for (int p = 2; p * p <= limit; p++) {
            if (!isPrime[p])
                continue;
            for (int q = p * p; q <= limit; q += p) {
                isPrime[q] = false;
            }
        }
        List<Integer> primes = new ArrayList<>();
        for (int p = 2; p <= limit; p++) {
            if (isPrime[p])
                primes.add(p);
        }
        return primes;
    }

    static int solve(int index) {
        if (index == 1)
            return 2;
        int upper = 64;
        if (index >= 6) {
            double n = index;
            upper = (int) (n * (Math.log(n) + Math.log(Math.log(n)))) + 16;
        }
        while (true) {
            List<Integer> primes = sievePrimes(upper);
            if (primes.size() >= index)
                return primes.get(index - 1);
            upper *= 2;
        }
    }

    public static void main(String[] args) {
        assert solve(6) == 13 : "Checkpoint failed for index=6";
        System.out.println(solve(10001));
    }
}
