#include <bits/stdc++.h>
using namespace std;

void solve() {
    int n;
    cin >> n;  // 读取当前测试用例的账号数量
    vector<long long> a(n);  // 存储每个账号的权重
    for (int i = 0; i < n; i++)
        cin >> a[i];  // 读取每个账号的权重

    // 使用map记录连通块:
    // key: 连通块的特征值(该连通块所有账号权重的按位或)
    // value: 该连通块包含的账号数量
    map<long long, int> m;

    int ans = 0;  // 记录最大连通块的大小

    // 遍历每个账号
    for (int i = 0; i < n; i++) {
        vector<long long>
        ks;  // 存储需要与当前账号合并的连通块的特征值

        // 遍历已有连通块,检查哪些与当前账号连通
        for (auto [k, v] : m) {
            // 如果当前账号权重a[i]与连通块特征值k的按位与结果>=1
            // 说明它们有共同位,应该合并到同一连通块
            if ((a[i] & k) >= 1) {
                ks.push_back(k);  // 记录需要合并的连通块
            }
        }

        long long kk = a[i];  // 新连通块的特征值,初始为当前账号权重
        int cnt = 0;  // 统计需要合并的连通块的总账号数

        // 合并所有需要合并的连通块
        for (long long k : ks) {
            kk |= k;     // 更新新连通块特征值(按位或合并)
            cnt += m[k]; // 累加被合并连通块的账号数
            m.erase(k);  // 从map中移除被合并的连通块
        }

        // 创建新连通块(包含当前账号):
        // 新连通块大小 = 被合并连通块的账号总数 + 当前账号
        m[kk] = cnt + 1;

        // 更新最大连通块大小
        ans = max(ans, cnt + 1);
    }

    // 输出当前测试用例的最大连通块大小
    cout << ans << "\n";
}

int main() {
    int n;
    cin >> n;  // 读取测试用例数量
    while (n--) {
        solve();  // 处理每个测试用例
    }
}