#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define siz(x) (int)(x.size())
#define all(x) x.begin(), x.end()
#define debug_arr(x,len) for(int _=1; _<=len; _++) cout<<x[_]<<" "; cout<<'\n';
#define debug(x) cout<<'\n'<<#x<<": "<<x<<'\n';
const int maxN = 2e5+5;

int n, a[maxN], truoc[maxN], sau[maxN], truoc_a[maxN], sau_a[maxN];

struct custom_set
{
    bool operator()(int a1, int a2) const
    {
        return max(truoc[a1], sau[a1]) < max(truoc[a2], sau[a2]);
    }
};

void solve()
{
    int ans = 0;
    set<int, custom_set>clone;
    deque<pair<int,int>>dq;
    for(int i=1; i<=n; i+=1) dq.push_back({a[i], i});
    sort(all(dq), greater<pair<int,int>>());
    set<int>se;
    for(int i=1; i<=n; i+=1) se.insert(i);
    for(int i=0; i<n; i+=1)
    {
        int need = dq[i].fi, loc = dq[i].se;
        bool ok = 1;
        if(clone.empty()) ok = 0;
        else
        {
            int tmp = *clone.rbegin();
            // if(loc == 4)
            // {
            //     for(auto j: clone) cout<<truoc[j]<<" "<<sau[j]<<'\n';
            // }
            if(max(truoc[tmp], sau[tmp]) == need) ok = 1;
            else ok = 0;
        }
        if(!ok)
        {
            ans++;
            auto tmp = se.upper_bound(loc);
            if(tmp == se.end()) sau[ans] = 0;
            else sau[ans] = a[*tmp];
            tmp = se.lower_bound(loc);
            if(tmp == se.begin()) truoc[ans] = 0;
            else
            {
                tmp--;
                truoc[ans] = a[*tmp];
            }
            clone.insert(ans);
        }
        else
        {
            int cur = *clone.rbegin();
            // cout<<truoc[cur]<<" "<<sau[cur]<<'\n';
            clone.erase(cur);
            if(sau[cur] == need)
            {
                auto tmp = se.upper_bound(loc);
                if(tmp == se.end()) sau[cur] = 0;
                else sau[cur] = a[*tmp];
            }
            else
            {
                auto tmp = se.lower_bound(loc);
                if(tmp == se.begin()) truoc[cur] = 0;
                else
                {
                    tmp--;
                    truoc[cur] = a[*tmp];
                }
            }
            // cout<<truoc[cur]<<" "<<sau[cur]<<'\n';
            clone.insert(cur);
        }
        se.erase(loc);
    }
    cout<<ans<<'\n';
}

int32_t main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);
    int test=1;
    cin>>test;
    while(test--)
    {
        cin>>n;
        for(int i=0; i<=n+1; i+=1) a[i] = 0;
        for(int i=1; i<=n; i+=1) cin>>a[i];
        solve();
    }
}