import bisect def sieves(nn: int): is_prime = [True] * nn least_p = [-1] * nn is_prime[0] = is_prime[1] = False least_p[1] = 1 mobius = [1] * nn mobius[0] = 0 for p in range(2, nn): if not is_prime[p]: continue least_p[p] = p mobius[p] = -1 for q in range(p * 2, nn, p): is_prime[q] = False if least_p[q] == -1: least_p[q] = p if q % (p * p) == 0: mobius[q] = 0 else: mobius[q] *= -1 primes = [p for p in range(2, nn) if is_prime[p]] return is_prime, least_p, primes, mobius def prime_factorize(n: int): ans = {} while n > 1: p = least_p[n] e = 0 while n % p == 0: n //= p e += 1 ans[p] = e return ans def get_divisors(n: int): """正の約数列挙 Args: n (int): 約数を求める数 (>= 1) Returns: list[int]: `n`の正の約数 Notes: - `n`の約数の個数をσ(n)として - 計算量 Θ( σ(n) * log(σ(n)) ) - n <= 10^7 で σ(n) <= σ(8648640) = 448 - n <= 10^9 で σ(n) <= σ(735134400) = 1344 - n <= 10^18 で σ(n) <= σ(897612484786617600) = 103680 """ pe = prime_factorize(n) ans = [1] for p, e in pe.items(): exps = [p**ei for ei in range(1, e + 1)] ans.extend([d * f for d in ans for f in exps]) ans.sort() return ans is_prime, least_p, primes, mobius = sieves(200 + 1) def count_le(n): if n < 1: return 0 bb = 100 dp = [0] * bb for b in range(2, bb): if 2**b > n: break a = bisect.bisect_right(range(n + 1), n, key=lambda a: a**b) - 1 dp[b] = a - 1 for p in primes: for i in range(p, bb, p): dp[i // p] -= dp[i] dp[1] = 1 return sum(dp) def solve(k): ans = bisect.bisect_left(range(10**18 * 2), k, key=count_le) return ans case_t = 1 case_t = int(input()) for _ in [None] * case_t: k = int(input()) print(solve(k))