# k 回バウンドさせて、総距離 D まで飛ばす # そのときの最初の飛距離の最小値 def f(k, d): # 最初の飛距離を二分探索 lo = 1 hi = d minx = 1 << 60 while lo <= hi: m = (lo + hi) // 2 t = x = m for _ in range(k): x //= 2 t += x if t == d: minx = min(minx, m) if t >= d: hi = m - 1 else: lo = m + 1 return minx D = int(input()) # バウンド回数を固定 ans = min(f(i, D) for i in range(70)) print(ans)