#include <bits/stdc++.h>

using namespace std;

void max_self(int &a, int b) {
    a = max(a, b);
}

template<typename T>
class fenwick {
    public:
        int N;
        vector<int> BIT;

        fenwick(int n) : N(n) {
            BIT.resize(N);
        }

        void update(int index, int val) {
            while(index < N) {
                max_self(BIT[index], val);
                index |= (index + 1);
            }
        }

        T query(int x) {
            T ans{};
            while(x >= 0) {
                max_self(ans, BIT[x]);
                x = (x & (x + 1)) - 1;
            }
            return ans;
        }
};

void test_case() {
    int N;
    cin >> N;
    vector<int> a(N + 1);
    stack<int> S;
    vector<int> next(N + 1);
    vector<vector<int>> has_next(N + 1);
    for(int i = 1; i <= N; ++i) {
        cin >> a[i];
        while(!S.empty() && a[S.top()] <= a[i])
            S.pop();
        if(!S.empty()) {
            next[i] = S.top();
            has_next[S.top()].emplace_back(i);
        }
        S.emplace(i);
    }
    fenwick<int> BIT(N + 1);
    vector<int> dp(N + 1);
    int ans = 0;
    for(int i = 1; i <= N; ++i) {
        max_self(dp[i], BIT.query(a[i]) + 1);
        for(int index : has_next[i])
            max_self(dp[index], BIT.query(a[index]) + 2);
        BIT.update(a[i], dp[i]);
        max_self(ans, dp[i]);
    }
    cout << ans << '\n';
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int T;
    cin >> T;
    while(T--)
        test_case();
}
