#include<bits/stdc++.h>
#define ll long long
#define dbg(x) cout<<#x<<": "<<x<<endl;
#define N 500005
#define M 1000000007
#define pii pair<ll,ll>
#define fast ios_base::sync_with_stdio(0);cin.tie(0);
using namespace std;

int s[N*3];

void build(int node,int l,int r)
{
    if(l==r)
    {
        s[node]=1;
        return;
    }
    build(node*2,l,(l+r)/2);
    build(node*2+1,(l+r)/2+1,r);
    s[node]=max(s[node*2],s[node*2+1]);
}
void update(int node,int l,int r,int idx,int p)
{
    if(idx<l||r<idx)
    {
        return;
    }
    if(l==r)
    {
        s[node]=max(s[node],p);
        return;
    }
    update(node*2,l,(l+r)/2,idx,p);
    update(node*2+1,(l+r)/2+1,r,idx,p);
    s[node]=max(s[node*2],s[node*2+1]);
    return;
}
int query(int node,int l,int r,int b,int e)
{
    if(r<b||e<l)
        return 0;
    if(b<=l&&r<=e)
        return s[node];
    return max(query(node*2,l,(l+r)/2,b,e),query(node*2+1,(l+r)/2+1,r,b,e));
}

int a[N];
vector<pair<int,int>>v;
void solve()
{
    v.clear();
    int n;
    cin>>n;
    build(1,0,n-1);
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        v.push_back({a[i],i});
    }
    sort(v.rbegin(),v.rend());

    set<int>st;

    for(auto u:v)
    {
        //case1
        int what=u.first,idx=u.second;
        //cout<<what<<endl;
        auto low=st.lower_bound(idx);
        if(low!=st.end())
        {
            int nxt=query(1,0,n-1,*low,n);
            update(1,0,n-1,idx,nxt+1);
        }

        //case2
        if(low!=st.begin())
        {
            low--;
            int nxt=query(1,0,n-1,idx,idx);
            update(1,0,n-1,*low,nxt+1);
        }
        st.insert(idx);
    }
    cout<<query(1,0,n-1,0,n-1)<<'\n';
}

int main()
{
    fast;
    int t;
    cin>>t;
    while(t--)
        solve();

}
