#!/usr/bin/env python3

from collections import defaultdict,deque

from heapq import heappush, heappop

from bisect import bisect_left, bisect_right

import sys, random, itertools, math

sys.setrecursionlimit(10**5)

input = sys.stdin.readline

sqrt = math.sqrt

def LI(): return list(map(int, input().split()))

def LF(): return list(map(float, input().split()))

def LI_(): return list([int(x)-1 for x in input().split()])

def II(): return int(eval(input()))

def IF(): return float(eval(input()))

def LS(): return list(map(list, input().split()))

def S(): return list(input().rstrip())

def IR(n): return [II() for _ in range(n)]

def LIR(n): return [LI() for _ in range(n)]

def FR(n): return [IF() for _ in range(n)]

def LFR(n): return [LI() for _ in range(n)]

def LIR_(n): return [LI_() for _ in range(n)]

def SR(n): return [S() for _ in range(n)]

def LSR(n): return [LS() for _ in range(n)]

mod = 1000000007

inf = float('INF')





def primes(n):

    """ 

    Input n>=6, Returns a list of primes, 2 <= p < n 

    6以上の数であれば p (素数) <= n のlistを返す 

    :param int n:

    :rytpe list:

    """

    n, correction = n-n%6+6, 2-(n%6>1)

    sieve = [True] * (n//3)

    for i in range(1,int(n**0.5)//3+1):

        if sieve[i]:

            k=3*i+1|1

            sieve[      k*k//3      ::2*k] = [False] * ((n//6-k*k//6-1)//k+1)

            sieve[k*(k-2*(i&1)+4)//3::2*k] = [False] * ((n//6-k*(k-2*(i&1)+4)//6-1)//k+1)

    return [2,3] + [3*i+1|1 for i in range(1,n//3-correction) if sieve[i]]



#solve

def solve():

    x = II()

    p = primes(10 ** 6)

    print((p[bisect_left(p, x)]))

    return





#main

if __name__ == '__main__':

    solve()

n = int(eval(input()))

def f(x):

    for k in range(2, int(x**0.5) + 1):

        if x % k != 0:

            continue

        return False

    return True

i = n

while 1:

    if f(i):

        print(i)

        break

    i += 1
#!/usr/bin/env python3
from collections import defaultdict, deque
from heapq import heappush, heappop
from bisect import bisect_left, bisect_right
import sys, random, itertools, math

sys.setrecursionlimit(10**5)
input = sys.stdin.readline
sqrt = math.sqrt


def LI():
    return list(map(int, input().split()))


def LF():
    return list(map(float, input().split()))


def LI_():
    return list([int(x) - 1 for x in input().split()])


def II():
    return int(eval(input()))


def IF():
    return float(eval(input()))


def LS():
    return list(map(list, input().split()))


def S():
    return list(input().rstrip())


def IR(n):
    return [II() for _ in range(n)]


def LIR(n):
    return [LI() for _ in range(n)]


def FR(n):
    return [IF() for _ in range(n)]


def LFR(n):
    return [LI() for _ in range(n)]


def LIR_(n):
    return [LI_() for _ in range(n)]


def SR(n):
    return [S() for _ in range(n)]


def LSR(n):
    return [LS() for _ in range(n)]


mod = 1000000007
inf = float("INF")


def primes(n):
    """
    Input n>=6, Returns a list of primes, 2 <= p < n
    6以上の数であれば p (素数) <= n のlistを返す
    :param int n:
    :rytpe list:
    """
    n, correction = n - n % 6 + 6, 2 - (n % 6 > 1)
    sieve = [True] * (n // 3)
    for i in range(1, int(n**0.5) // 3 + 1):
        if sieve[i]:
            k = 3 * i + 1 | 1
            sieve[k * k // 3 :: 2 * k] = [False] * ((n // 6 - k * k // 6 - 1) // k + 1)
            sieve[k * (k - 2 * (i & 1) + 4) // 3 :: 2 * k] = [False] * (
                (n // 6 - k * (k - 2 * (i & 1) + 4) // 6 - 1) // k + 1
            )
    return [2, 3] + [3 * i + 1 | 1 for i in range(1, n // 3 - correction) if sieve[i]]


# solve
def solve():
    x = II()
    p = primes(10**6)
    print((p[bisect_left(p, x)]))
    return


# main
if __name__ == "__main__":
    solve()

n = int(eval(input()))


def f(x):
    for k in range(2, int(x**0.5) + 1):
        if x % k != 0:
            continue
        return False
    return True


i = n
while 1:
    if f(i):
        print(i)
        break
    i += 1

-#!/usr/bin/env python3 -from collections import defaultdict, deque -from heapq import heappush, heappop -from bisect import bisect_left, bisect_right -import sys, random, itertools, math - -sys.setrecursionlimit(10**5) -input = sys.stdin.readline -sqrt = math.sqrt +n = int(eval(input())) -def LI(): -    return list(map(int, input().split())) +def f(x): +    for k in range(2, int(x**0.5) + 1): +        if x % k != 0: +            continue +        return False +    return True -def LF(): -    return list(map(float, input().split())) - - -def LI_(): -    return list([int(x) - 1 for x in input().split()]) - - -def II(): -    return int(eval(input())) - - -def IF(): -    return float(eval(input())) - - -def LS(): -    return list(map(list, input().split())) - - -def S(): -    return list(input().rstrip()) - - -def IR(n): -    return [II() for _ in range(n)] - - -def LIR(n): -    return [LI() for _ in range(n)] - - -def FR(n): -    return [IF() for _ in range(n)] - - -def LFR(n): -    return [LI() for _ in range(n)] - - -def LIR_(n): -    return [LI_() for _ in range(n)] - - -def SR(n): -    return [S() for _ in range(n)] - - -def LSR(n): -    return [LS() for _ in range(n)] - - -mod = 1000000007 -inf = float("INF") - - -def primes(n): -    """ -    Input n>=6, Returns a list of primes, 2 <= p < n -    6以上の数であれば p (素数) <= n のlistを返す -    :param int n: -    :rytpe list: -    """ -    n, correction = n - n % 6 + 6, 2 - (n % 6 > 1) -    sieve = [True] * (n // 3) -    for i in range(1, int(n**0.5) // 3 + 1): -        if sieve[i]: -            k = 3 * i + 1 | 1 -            sieve[k * k // 3 :: 2 * k] = [False] * ((n // 6 - k * k // 6 - 1) // k + 1) -            sieve[k * (k - 2 * (i & 1) + 4) // 3 :: 2 * k] = [False] * ( -                (n // 6 - k * (k - 2 * (i & 1) + 4) // 6 - 1) // k + 1 -            ) -    return [2, 3] + [3 * i + 1 | 1 for i in range(1, n // 3 - correction) if sieve[i]] - - -# solve -def solve(): -    x = II() -    p = primes(10**6) -    print((p[bisect_left(p, x)])) -    return - - -# main -if __name__ == "__main__": -    solve() +i = n +while 1: +    if f(i): +        print(i) +        break +    i += 1