def solve(): n = int(input()) for p in range(2, 10 ** 6 + 1): acc = 1 pk = 1 while acc <= n: if n % acc == 0 and n // acc < p: return p pk *= p acc += pk d = 1 div_f, div_b = [], [] while d * d <= n: if n % d == 0: div_f.append(d) div_b.append(n // d) d += 1 divs = div_f divs += reversed(div_b) for d in reversed(divs): p = n // d - 1 if d < p: return p return n + 1 print(solve())