D = int(input()) def f(x, k, flag=True): # 最初の距離x、跳ね返る回数k回 # D 以上飛ぶか? res = 0 for _ in range(k): res += x x //= 2 if x == 0: break if flag: return res >= D else: return res == D limit = 10**18 ans = limit + 1 for k in range(1, 66): ok = limit ng = 0 while abs(ok - ng) != 1: mid = (ok + ng)//2 if f(mid, k): ok = mid else: ng = mid # ok のときにきっかりDか? if f(ok, k, False): ans = min(ans, ok) print(ans)