description: Polycarp likes squares and cubes of positive integers. Here is the beginning of the sequence of numbers he likes: 1, 4, 8, 9, ....
  
  For a given number n, count the number of integers from 1 to n that Polycarp likes. In other words, find the number of such x that x is a square of a positive integer number or a cube of a positive integer number (or both a square and a cube simultaneously).
  
  Input
  
  The first line contains an integer t (1 ≤ t ≤ 20) — the number of test cases.
  
  Then t lines contain the test cases, one per line. Each of the lines contains one integer n (1 ≤ n ≤ 10^9).
  
  Output
  
  For each test case, print the answer you are looking for — the number of integers from 1 to n that Polycarp likes.
  
  Example
  
  Input
  
  
  6
  10
  1
  25
  1000000000
  999999999
  500000000
  
  
  Output
  
  
  4
  1
  6
  32591
  32590
  23125
solution: import java.io.*;
  import java.util.*;
  
  public class B {
      static class FastReader {
          BufferedReader br;
          StringTokenizer st;
  
          public FastReader() {
              br = new BufferedReader(new
                      InputStreamReader(System.in));
          }
  
          String next() {
              while (st == null || !st.hasMoreElements()) {
                  try {
                      st = new StringTokenizer(br.readLine());
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
              return st.nextToken();
          }
  
          int nextInt() {
              return Integer.parseInt(next());
          }
  
          long nextLong() {
              return Long.parseLong(next());
          }
  
          double nextDouble() {
              return Double.parseDouble(next());
          }
  
          String nextLine() {
              String str = "";
              try {
                  str = br.readLine();
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return str;
          }
      }
  
      static FastReader s = new FastReader();
      static PrintWriter out = new PrintWriter(System.out);
  
      private static int[] rai(int n) {
          int[] arr = new int[n];
          for (int i = 0; i < n; i++) {
              arr[i] = s.nextInt();
          }
          return arr;
      }
  
      private static int[][] rai(int n, int m) {
          int[][] arr = new int[n][m];
          for (int i = 0; i < n; i++) {
              for (int j = 0; j < m; j++) {
                  arr[i][j] = s.nextInt();
              }
          }
          return arr;
      }
  
      private static long[] ral(int n) {
          long[] arr = new long[n];
          for (int i = 0; i < n; i++) {
              arr[i] = s.nextLong();
          }
          return arr;
      }
  
      private static long[][] ral(int n, int m) {
          long[][] arr = new long[n][m];
          for (int i = 0; i < n; i++) {
              for (int j = 0; j < m; j++) {
                  arr[i][j] = s.nextLong();
              }
          }
          return arr;
      }
  
      private static int ri() {
          return s.nextInt();
      }
  
      private static long rl() {
          return s.nextLong();
      }
  
      private static String rs() {
          return s.next();
      }
  
      static int gcd(int a,int b)
      {
          if(b==0)
          {
              return a;
          }
          return gcd(b,a%b);
      }
  
      static long gcd(long a,long b)
      {
          if(b==0)
          {
              return a;
          }
          return gcd(b,a%b);
      }
      static boolean isPrime(int n) {
          //check if n is a multiple of 2
          if(n==1)
          {
              return false;
          }
          if(n==2)
          {
              return true;
          }
          if (n % 2 == 0) return false;
          //if not, then just check the odds
          for (int i = 3; i <= Math.sqrt(n); i += 2) {
              if (n % i == 0)
                  return false;
          }
          return true;
      }
      static boolean[] sieveOfEratosthenes(int n)
      {
          // Create a boolean array "prime[0..n]" and initialize
          // all entries it as true. A value in prime[i] will
          // finally be false if i is Not a prime, else true.
          boolean prime[] = new boolean[n+1];
          for(int i=0;i<n;i++)
              prime[i] = true;
  
          for(int p = 2; p*p <=n; p++)
          {
              // If prime[p] is not changed, then it is a prime
              if(prime[p] == true)
              {
                  // Update all multiples of p
                  for(int i = p*p; i <= n; i += p)
                      prime[i] = false;
              }
          }
          return prime;
      }
  
  
      static int MOD = 998244353;
  
      static class Building
      {
          int ind;long val;
  
          public Building(int ind, long val) {
              this.ind = ind;
              this.val = val;
          }
      }
      public static void main(String[] args) {
          StringBuilder ans = new StringBuilder();
          int t = ri();
  //        int t=1;
          while (t-- > 0)
          {
              long n=ri();
              long sqrt = (long) Math.sqrt(n);
  
              long count = 0;
  //            boolean[] vals = new boolean[sqrt+1];
              HashSet<Long> set = new HashSet<>();
              for(long i=1;i<=sqrt;i++)
              {
                  if((i*i)<=n)
                  {
                      set.add((long) (i*i));
                  }
                  if((i*i*i)<=n)
                  {
                      set.add((long) (i*i*i));
                  }
              }
  
  
  
              ans.append(set.size()).append("\n");
  
          }
          out.print(ans.toString());
          out.flush();
  
      }
  
  }
  
  