#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=5e5+5;
int stk[maxm],head;
int d[maxm];
int a[maxm];
int n;
//
int rt[maxm],tot;
int lc[maxm*40],rc[maxm*40],ma[maxm*40];
inline void pp(int k){
    ma[k]=max(ma[lc[k]],ma[rc[k]]);
}
void update(int x,int val,int l,int r,int &k,int last){
    k=++tot;
    lc[k]=lc[last];
    rc[k]=rc[last];
    if(l==r){
        ma[k]=val;
        return ;
    }
    int mid=(l+r)/2;
    if(x<=mid)update(x,val,l,mid,lc[k],lc[last]);
    else update(x,val,mid+1,r,rc[k],rc[last]);
    pp(k);
}
int ask(int st,int ed,int l,int r,int k){
    if(!k)return 0;
    if(st<=l&&ed>=r)return ma[k];
    int mid=(l+r)/2;
    int ans=0;
    if(st<=mid)ans=max(ans,ask(st,ed,l,mid,lc[k]));
    if(ed>mid)ans=max(ans,ask(st,ed,mid+1,r,rc[k]));
    return ans;
}
//
void solve(){
    cin>>n;
    //init
    tot=0;
    ma[0]=0;
    //
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int ans=0;
    head=0;
    for(int i=1;i<=n;i++){
        while(head&&a[stk[head]]<a[i]){
            head--;
        }
        d[i]=1;
        d[i]=max(d[i],ask(1,a[i],1,n,rt[i-1])+1);
        if(head){
            int k=stk[head];
            d[i]=max(d[i],ask(1,a[i],1,n,rt[k-1])+2);
        }
        update(a[i],d[i],1,n,rt[i],rt[i-1]);
        stk[++head]=i;
        ans=max(ans,d[i]);
    }
    cout<<ans<<endl;
}
signed main(){
    ios::sync_with_stdio(0);
    int T;cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
