#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for (int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<long long> vll;
void solve()
{
ll n;
cin >> n;
vector<pair<ll, ll>> v(n);
for (ll i = 0; i < n; i++)
{
cin >> v[i].first;
v[i].second = i;
}
vector<vector<ll>> g(n);
if (n == 1)
{
cout << 1 << endl;
return;
}
for (ll i = 0; i < n; i++)
{
if (i == 0)
{
if (v[i + 1] < v[i])
{
g[i].push_back(i + 1);
}
if (v[i + 1] == v[i])
{
g[i].push_back(i + 1);
g[i + 1].push_back(i);
}
}
else if (i == n - 1)
{
if (v[n - 2] < v[n - 1])
{
g[n - 1].push_back(n - 2);
}
if (v[n - 2] == v[n - 1])
{
g[n - 1].push_back(n - 2);
g[n - 2].push_back(n - 1);
}
}
else
{
if (v[i - 1] < v[i])
{
g[i].push_back(i - 1);
}
if (v[i] > v[i + 1])
{
g[i].push_back(i + 1);
}
if (v[i] == v[i + 1])
{
g[i].push_back(i + 1);
g[i + 1].push_back(i);
}
if (v[i + 1] == v[i])
{
g[i].push_back(i + 1);
g[i + 1].push_back(i);
}
}
}
sort(v.rbegin(), v.rend());
vector<ll> visited(n, 0);
ll grp_index = 0;
for (ll i = 0; i < n; i++)
{
if (visited[v[i].second])
{
continue;
}
queue<ll> q;
q.push(v[i].second);
while (!q.empty())
{
auto e = q.front();
q.pop();
visited[e] = 1;
for (auto f : g[e])
{
if (!visited[f])
{
q.push(f);
}
}
}
grp_index++;
}
cout << grp_index << endl;
}
int main()
{
cin.tie(0)->sync_with_stdio(0);
cin.exceptions(cin.failbit);
int t;
cin >> t;
while (t--)
solve();
}