#include <cstdio>
#include <algorithm>
#include <queue>

using namespace std;

const int MAXN=5e5+7;

int N;
int a[MAXN];
int BIT[MAXN];
int cnt[MAXN];

void update(int i,int v){
    if (i>N) return;
    BIT[i]=max(BIT[i],v);
    if (i)
        update(i+(i&-i),v);
}

int query(int i){
    if (i==0) return BIT[0];
    return max(BIT[i],query(i-(i&-i)));
}

int main(){
    int t;
    scanf("%d",&t);
    for(;t;t--){
        scanf("%d",&N);
        for(int i=0;i<N;i++) scanf("%d",a+i);
        for(int i=0;i<=N;i++) BIT[i]=0,cnt[i]=0;

        priority_queue<int,vector<int>,greater<int>> q;
        int ans=0;
        q.emplace(0);

        for(int i=0;i<N;i++){
            auto v=a[i];
            auto len=query(v);
            update(v,len+1);

            while(!q.empty()&&q.top()<=v){
                update(q.top(),cnt[q.top()]+1);
                cnt[q.top()]++;
                q.pop();
            }

            cnt[v]=len+1;
            q.emplace(v);
        }

        for(int i=0;i<=N;i++) ans=max(ans,cnt[i]);
        printf("%d\n",ans);

    }



    return 0;
}