#include <bits/stdc++.h>
const int MAX = 2e5 + 10;
using namespace std;
void fast() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
}
long long gcd(long long a, long long b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}
long long lcd(long long a, long long b) { return (a * b) / gcd(a, b); }
bool f(long long a, long long b) { return a > b; }
long long max_sum_subarrays(long long ara[], long long n) {
  long long ans = 0, sum = 0;
  for (long long k = 0; k < n; k++) {
    sum = max(ara[k], sum + ara[k]);
    ans = max(ans, sum);
  }
  return ans;
}
long long num_divisors(long long n) {
  long long cnt = 0;
  for (int i = 1; i * i <= n; i++) {
    if (n % i == 0 && i * i == n) cnt += 1;
    if (n % i == 0 && i * i != n) cnt += 2;
  }
  return cnt;
}
long long comb(long long m, long long n) {
  long long x = max(m - n, n), ans = 1, i = 1;
  for (long long k = m; k >= x + 1; k--) {
    ans *= k;
    ans /= i;
    i++;
  }
  return ans;
}
bool isprime(long long n) {
  if (n == 1) return false;
  for (int i = 2; i * i <= n; i++) {
    if (n % i == 0) return false;
  }
  return true;
}
bool isdivisible(long long n) {
  long long p = n;
  while (p) {
    if (p % 10 != 0) {
      if (n % (p % 10) != 0) return true;
    }
    p /= 10;
  }
  return false;
}
bool check(int a[], int n) {
  for (int i = 0; i < n - 1; i++) {
    if (a[i] < a[i + 1]) return false;
  }
  return true;
}
void solve() {
  long long n;
  cin >> n;
  long long tot = 1, ans = 0, temp;
  for (long long i = 1;; i += tot) {
    temp = i * (i + 1) / 2;
    if (temp <= n) {
      ans++;
      n -= temp;
    } else
      break;
    tot *= 2;
  }
  cout << ans << endl;
}
int main() {
  long long t;
  cin >> t;
  while (t--) {
    solve();
  }
  return 0;
}
