#include #include #include #include #include using namespace atcoder; using namespace std; using ll = long long; using ull = unsigned long long; template using max_heap = priority_queue; template using min_heap = priority_queue, greater<>>; ll ll_min = numeric_limits::min(); ll ll_max = numeric_limits::max(); ll ALPHABET_N = 26; using mint = modint998244353; #define rep(i, n) for (ll i = (ll)0; i < (ll)n; i++) #define rep_(i, k, n) for (ll i = (ll)k; i < (ll)n; i++) #define all(a) a.begin(), a.end() bool will_multiply_overflow(ll a, ll b) { if (a == 0 || b == 0) return false; if (a > 0 && b > 0) return a > ll_max / b; if (a < 0 && b < 0) return a < ll_max / b; if (a > 0 && b < 0) return b < ll_min / a; if (a < 0 && b > 0) return a < ll_min / b; return false; } int main() { ll q; cin >> q; unordered_map mp; for(ll i = 2; i <= 1000000; i++) { ll x = i; ll iter = 1; while(1000000000000LL >= x) { mp[x] = max(mp[x], iter); if(will_multiply_overflow(x, i)) break; x *= i; iter++; } } rep(_, q) { ll n; cin >> n; if (mp.find(n) != mp.end()) { cout << mp[n] << endl; } else { cout << 1 << endl; } } return 0; }