#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define sz size()
using namespace std;
const int N=5e5+10;
int a[N],t[N],dp[N];
vector<int>V[N];
int n;
void add(int i,int x)
{
    while(i<=n) t[i]=max(t[i],x),i+=i&(-i);
}
int qr(int i)
{
    int res=0;
    while(i>=1) res=max(res,t[i]),i-=i&(-i);
    return res;
}
int main()
{
    ios::sync_with_stdio(false);
    int tt;
    cin>>tt;
    while(tt--)
    {

        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            dp[i]=t[i]=0;
            V[i].clear();
        }
        stack<int>st;
        for(int i=1;i<=n;i++)
        {
            while(!st.empty()&&a[st.top()]<=a[i]) st.pop();
            if(!st.empty()) V[st.top()].pb(i);
            st.push(i);
        }
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            dp[i]=max(dp[i],qr(a[i])+1);
            for(int j=0;j<V[i].sz;j++)
            {
                dp[V[i][j]]=max(dp[V[i][j]],qr(a[V[i][j]])+2);
            }
            add(a[i],dp[i]);
            ans=max(ans,dp[i]);
        }
        cout<<ans<<endl;
    }
    return 0;
}
