# region template import typing import sys import math import collections import bisect import itertools import heapq import copy def ni(): return int(sys.stdin.buffer.readline()) def ns(): return map(int, sys.stdin.buffer.readline().split()) def ns1(): return map(lambda x: int(x)-1, sys.stdin.buffer.readline().split()) def na(): return list(map(int, sys.stdin.buffer.readline().split())) def na1(): return list(map(lambda x: int(x)-1, sys.stdin.buffer.readline().split())) def nall(): return list(map(int, sys.stdin.buffer.read().split())) def flush(): return sys.stdout.flush() def nic(): return int(sys.stdin.readline()) def nsc(): return map(int, sys.stdin.readline().split()) def nac(): return list(map(int, sys.stdin.readline().split())) def na1c(): return list(map(lambda x: int(x)-1, sys.stdin.readline().split())) # endregion # sys.setrecursionlimit(10**7+1) inf = 10**20 mod = 10**9+7 # mod = 998244353 def main(): n = ni() res = n lim = 200 def bisect(n, p): ng = 10**18 ok = 0 while ng-ok > 1: nxt = (ng+ok)//2 v = pow(nxt, p) if v > n: ng = nxt else: ok = nxt return ok for j in range(2, lim): i = bisect(n, j) k = n-pow(i, j) tres = i+j+k if tres >= 0: res = min(res, tres) print(res) if __name__ == '__main__': main()