#include<bits/stdc++.h>
using namespace std;
struct BIT{
	int n;
	vector<int>tree;
	BIT(int n):n(n){
		tree=vector<int>(n+1);
	}
	static int lowbit(int x){
		return x&(-x);
	}
	void update(int x,int v){
		assert(x);
		for(;x<=n;x+=lowbit(x)){
			tree[x]=max(tree[x],v);
		}
	}
	int query(int x){
		int res=0;
		for(;x;x-=lowbit(x)){
			res=max(res,tree[x]);
		}
		return res;
	}
};
int main(){
	int t;
	cin>>t;
	while(t--){
		int n;cin>>n;
		vector<int>a(n);
		for(auto & i:a)cin>>i;
		BIT dp(n+1);
		stack<pair<int,int>>st;
		st.push({1,1});
		dp.update(1,1);
		for(int i=0;i<n;i++){
			int t=dp.query(a[i])+1;
			while(!st.empty()&&st.top().first<=a[i]){
				dp.update(st.top().first,st.top().second+1);
				st.pop();
			}	
			st.push({a[i],t});
			dp.update(a[i],t);
		}
		cout<<dp.query(n)-1<<'\n';
	}
} 