#include <bits/stdc++.h>

#define int long long

using namespace std;

const int MAXN = 5e5 + 100;

int A[MAXN];

int ABI[MAXN];

void update(int x, int v)
{
	while(x < MAXN)
	{
		ABI[x] = max(ABI[x], v);
		x += x&-x;
	}
}

int query(int x)
{
	int res = 0;

	while(x)
	{
		res = max(res, ABI[x]);
		x -= x&-x;
	}
	return res;
}

int32_t main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int T;
    cin >> T;

    while(T--)
    {
    	int N;
    	cin >> N;

    	for(int i = 0 ; i <= N ; i++)
    	{
    		A[i] = 0;
    		ABI[i] = 0;
    	}

    	stack<pair<int,int>> st;

    	vector<int> temp[N+1];
    	vector<int> put[N+1];

    	for(int i = 1 ; i <= N ; i++)
    	{
    		cin >> A[i];
    		while(st.size() && st.top().first <= A[i])
    		{
    			st.pop();
    		}

    		if(st.size())
    		{
    			temp[st.top().second].push_back(i);
    		}

    		st.push({A[i],i});
    	}

    	int res = 0;

    	for(int i = 1 ; i <= N ; i++)
    	{
    		for(auto x : temp[i])
    		{
    			int qu = query(A[x])+2;
    			res = max(res, qu);
    			put[x].push_back(qu);
    		}
    		int qu = query(A[i])+1;
    		res = max(res, qu);
    		update(A[i], qu);
    		for(auto x : put[i])
    		{
    			update(A[i], x);
    		}
    	}

    	cout << res << '\n';
    }

    return 0;
}