#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
using ui = unsigned;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
#define rep(i,l,r) for(int i=(l);i<=(r);++i)
#define per(i,l,r) for(int i=(l);i>=(r);--i)
#define repn(i,n) for(int i=0;i<(n);++i)
#define sizc(x) ((int)(x).size())
#define allc(x) (x).begin(),(x).end()
#define fir first
#define sec second
class IO {
char ibuf[1 << 16], obuf[1 << 16], *ipl = ibuf, *ipr = ibuf, *op = obuf;
public:
~IO() { write(); }
void read() { if (ipl == ipr) ipr = (ipl = ibuf) + fread(ibuf, 1, 1 << 15, stdin); }
void write() { fwrite(obuf, 1, op - obuf, stdout), op = obuf; }
char getchar() { return (read(), ipl != ipr) ? *ipl++ : EOF; }
void putchar(char c) { *op++ = c; if (op - obuf > (1 << 15)) write(); }
template <typename V> IO& operator >> (V& v) {
int s = 1; char c = getchar(); v = 0;
for (; !isdigit(c); c = getchar()) if (c == '-') s = -s;
for (; isdigit(c); c = getchar()) v = (v << 1) + (v << 3) + (c ^ 48);
return v *= s, *this;
}
IO& operator << (char c) { return putchar(c), *this; }
template <typename V> IO& operator << (V v) {
if (!v) putchar('0'); if(v < 0) putchar('-'), v = -v;
char stk[100], *top = stk;
for (; v; v /= 10) *++top = v % 10 + '0';
while (top != stk) putchar(*top--); return *this;
}
} io;
constexpr int N = 1e5+5;
int n;
int a[N];
int mn[20][N],mx[20][N];
int qmn(int l,int r){
int k=__lg(r-l+1);
return min(mn[k][l],mn[k][r-(1<<k)+1]);
}
int qmx(int l,int r){
int k=__lg(r-l+1);
return max(mx[k][l],mx[k][r-(1<<k)+1]);
}
int f[N];
void solve(){
io>>n;rep(i,1,n)io>>a[i];
rep(i,1,n)mn[0][i]=mx[0][i]=a[i];
rep(j,1,19)rep(i,1,n-(1<<j)+1){
mn[j][i]=min(mn[j-1][i],mn[j-1][i+(1<<j-1)]);
mx[j][i]=max(mx[j-1][i],mx[j-1][i+(1<<j-1)]);
}
per(i,n,1){
f[i]=i;
while(f[i]<n){
int l=qmn(i,f[i]),r=qmx(i,f[i]);
int p=f[i]+1;
if(l<=a[p]&&a[p]<=r)break;
if(a[p]<l){
if(qmx(p,f[p])<l){
f[i]=f[p];
break;
}
int t=p;
per(j,19,0)if(t+(1<<j)<=f[p]&&mx[j][t]<l)t+=1<<j;
f[i]=t-1;
}
else{
if(qmn(p,f[p])>r){
f[i]=f[p];
break;
}
int t=p;
per(j,19,0)if(t+(1<<j)<=f[p]&&mn[j][t]>r)t+=1<<j;
f[i]=t-1;
}
}
}
int ans=n-1,p=1;
while(f[p]<n)p=f[p]+1,--ans;
cout<<ans<<'\n';
}
signed main(){
// freopen("doll.in","r",stdin);
// freopen("doll.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;io>>T;
while(T--)solve();
}