n=int(input()) ans=n-1 # p<=10**6の探索 for i in range(2,10**6+1): nn=n t=nn%i nn//=i flg=True while nn: if t==nn%i: nn//=i else: flg=False break if flg: print(i) exit() if n<10**6: print(ans) exit() # p>=10**6の探索 # ぞろ目になっても2桁を超えない st=set() for i in range(1,int(n**.5)+1): if n%i==0: if n//i-1>=10**6: st.add(i) if i>=10**6: st.add(n//i) # n=x*(p+1)=x*p+x # x:nの約数 for x in st: p=n//x p-=1 if p>=10**6 and n%p==(n//p)%p: ans=min(ans,p) print(ans)