#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int t;
int a[N];
int n;
struct seg_tree{
int l, r;
int sum;
int tag;
}seg[4 * N];
void push_up(int u){
seg[u].sum = seg[u << 1].sum | seg[u << 1 | 1].sum;
}
void init(int u, int l, int r){
if(l == r){
seg[u] = {l, r, a[l]};
return;
}
seg[u] = {l, r};
int mid = l + r >> 1;
init(u << 1, l, mid);
init(u << 1 | 1, mid + 1, r);
push_up(u);
}
void push_down(int u){
auto &root = seg[u], &lc = seg[u << 1], &rc = seg[u << 1 | 1];//带取地址符 对原数组修改
if(seg[u].tag)
lc.tag += root.tag, lc.sum += root.tag * (lc.r - lc.l + 1);
rc.tag += root.tag, rc.sum += root.tag * (rc.r - rc.l + 1);
root.tag = 0;
}
int query (int u,int l,int r) {//区间询问模板
if (l <= seg[u].l && seg[u].r <= r) return seg[u].sum;
// push_down (u);//询问只需要推懒标记而不需要push_up sum因为并没有值修改
int mid = seg[u].l + seg[u].r >> 1;
int ans = 0;
if (l <= mid) ans |= query (u << 1,l,r);
if (r >= mid + 1) ans |= query (u << 1 | 1,l,r);
return ans;
}
bool check(int x){
int ans = 0;
for(int i = 1;i <= n - x + 1;i++){
int y = query(1, i, i + x - 1);
if(x != y)return false;
}
return true;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> t;
while(t--){
cin >> n;
init(1, 1, n);
for(int i = 1;i <= n;i++)cin >> a[i];
int l = 1, r = n;
while(l < r){
int mid = (l + r) >> 1;
if(check(mid)) r = mid;
else l = mid + 1;
}
cout << l << endl;
}
return 0;
}