def sieve_of_eratosthenes(ub): # O(n loglog n) implementation. # returns prime numbers <= ub. if ub < 2: return [] prime = [True]*(ub+1) prime[0] = False prime[1] = False p = 2 while p*p <= ub: if prime[p]: # don't need to check 2p ~ (p-1)p (they've already been checked). for i in range(p*p, ub+1, p): prime[i] = False p += 1 return [i for i in range(ub+1) if prime[i]] N = int(input()) primes = sieve_of_eratosthenes(N + 100) for i in range(max(N-100, 2), N+101): if i not in primes: print(i) break