← Home
// SOUMYAJEET GHATAK
// FOLLOW THE PATH OF A RIGHTEOUS MAN
 
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <cmath>
#include <limits>
#include <iomanip>
#include <functional>
#include <utility>
#include <cctype>
#include <cassert>
#include <climits>
using namespace std;
 
#define FAST_IO ios::sync_with_stdio(false); cin.tie(nullptr);
#define int long long
 
#define vl vector<long long>
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define rep(i,n) for(int i=0;i<n;i++)
#define invl(v,n) rep(i,n) cin>>v[i];
 
bool solve(int mid, vl& arr, int n, map<int,int>& mp,vl& pref){
 
    if(!mp.empty() && mp.rbegin()->first >= mid){
        return true;
    }
 
    int x = mid;
    map<int,int> mp2=mp;
 
    for(int i = n-1; i >= 1; i--){
 
        mp2[pref[i-1]]--;
 
        if(mp2[pref[i-1]] == 0){
            mp2.erase(pref[i-1]);
        }
 
        if(arr[i] >= x) x--;
        else if(arr[i] < x) x++;
 
        if(x==0) return true;
 
        if(!mp2.empty() && mp2.rbegin()->first >= x){
            return true;
        }
    }
 
    return false;
}
 
void _Soumya_(){
 
    int n;
    cin>>n;
 
    vl arr(n);
    invl(arr,n);
 
    vl pref(n);
 
    int x = 0;
 
    rep(i,n){
        if(arr[i] > x) x++;
        else if(arr[i] < x) x--;
        pref[i] = x;
    }
 
    map<int,int> mp;
 
    for(int i=0;i<n-1;i++){
        mp[pref[i]]++;
    }
    int s = 0;
    int e = n-1;
    int ans = 0;
 
    while(s <= e){
 
        int mid = (s+e)/2;
 
        if(solve(mid,arr,n,mp,pref)){
            ans = mid;
            s = mid+1;
        }
        else{
            e = mid-1;
        }
    }
 
    cout<<ans<<"\n";
}
 
signed main(){
 
    FAST_IO
 
    int t;
    cin>>t;
 
    while(t--){
        _Soumya_();
    }
 
    return 0;
}