/*
题意: 将序列 交换排序成 逆序对 为 1 的排序
1.pre:置换环 pi -> a[pi] 最后会连成一个首尾相接的 环 答案是 n-cur
2.若 pi+1 / pi-1 已经在了 逆序对 ==1 ->flag
flag==0 Ans=n-cur+1
flag==1 Ans=n-cur-1
*/
/*
4
2
2 1
2
1 2
4
3 4 1 2
4
2 4 3 1
0 1 3 1
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string.h>
//#include<queue>
//#include<vector>
#include<bits/stdc++.h>
#define ll long long
#define ddd printf("-----------------------\n");
using namespace std;
const int maxn=2e5+10;
const int mod=998244353;
const int inf=0x3f3f3f3f;
int a[maxn],vis[maxn],n,cur,flag,num;
map< int,int > ring;
void dfs(int pos){
if(vis[a[pos]]) return;
vis[a[pos]]=1;
ring[a[pos]]=1;
if(ring[a[pos]-1]||ring[a[pos]+1]) flag=1;//????
dfs(a[pos]);
}
int main()
{
ios::sync_with_stdio(false);
int T;cin>>T; //cout<<T<<endl;
while(T--)
{
memset(vis,0,sizeof(vis));
//memset(ring,0,sizeof(ring));
cur=0; flag=0;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
if(vis[a[i]]==0){
++cur; num=0;
// memset(ring,0,sizeof(ring));
ring.clear();
dfs(i);
}
}
//cout<<cur<<endl;
if(flag==0) cout<<n-cur+1<<'\n';
else cout<<n-cur-1<<'\n';
}
return 0;
}