def is_prime(n):
    if n < 2:
        return False
    for p in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]:
        if n % p == 0:
            return n == p
    d = n - 1
    s = 0
    while d % 2 == 0:
        d //= 2
        s += 1
    for a in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]:
        if a >= n:
            continue
        x = pow(a, d, n)
        if x == 1 or x == n - 1:
            continue
        for _ in range(s - 1):
            x = pow(x, 2, n)
            if x == n - 1:
                break
        else:
            return False
    return True

def check_last_row(n, w):
    h = n // w
    r = n % w
    if r == 0:
        start = (h - 1) * w + 1
        end = h * w
    else:
        start = h * w + 1
        end = n
    for num in range(start, end + 1):
        if is_prime(num):
            return False
    return True

def check_left_column(n, w):
    h_total = n // w
    r = n % w
    if r != 0:
        h_total += 1
    current = 1
    for _ in range(h_total):
        if is_prime(current):
            return False
        current += w
        if current > n:
            break
    return True

def find_min_w(n):
    # Check possible W starting from the smallest possible
    # First, check if W=2 is possible
    for w in range(2, n):
        if check_last_row(n, w):
            # Check if the left column is all composite
            if check_left_column(n, w):
                return w
    # If no smaller W found, return N-1 as a fallback (which is guaranteed to work)
    return n - 1

n = int(input())
print(find_min_w(n))