using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var n = long.Parse(ReadLine()); var ans = n; for (var j = 2; j < 64; ++j) { var ok = 0L; var ng = n; while (ng - ok > 1) { var mid = (ok + ng) / 2; if (IsOverN(mid, j, n)) ng = mid; else ok = mid; } var ij = 1L; for (var x = 0; x < j; ++x) ij *= ok; ans = Math.Min(ans, ok + j + n - ij); } WriteLine(ans); } static bool IsOverN(long i, int j, long n) { var prev = 1L; var ij = 1L; for (var x = 0; x < j; ++x) { ij *= i; if (prev >= ij || ij % i != 0) return true; prev = ij; } return ij > n; } }