#include<bits/stdc++.h>
using namespace std;
int T,n,a[200001],f[200001],r[200001];
unordered_map<int,vector<int>> mp;//记录每个元素对应的索引集
int find(int u){//并查集
    if(u==f[u])
        return u;
    return f[u]=find(f[u]);
}
void merge(int u,int v){//按秩合并
    u=find(u);
    v=find(v);
    if(u==v)
        return ;
    if(r[u]<r[v])
        swap(u,v);
    if(r[u]==r[v])
        r[u]++;
    f[v]=u;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>T;
    while(T--){
        cin>>n;
        int cnt=0,minn=200001;
        mp.clear();
        for(int i=1;i<=n;i++)
            f[i]=i,r[i]=0;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            mp[a[i]].push_back(i);
            minn=min(minn,a[i]);
        }
        for(auto& u:mp){
            int x=u.first;
            vector<int>& tmp=u.second;
            if(mp.count(x+1)){//差值为1则合并索引集
                for(auto& i:tmp)
                    merge(tmp[0],i);
                merge(tmp[0],mp[x+1][0]);
            }
            if(x==minn)
                continue;
            if(mp.count(x-1)){
                for(auto& i:tmp)
                    merge(tmp[0],i);
                merge(tmp[0],mp[x-1][0]);
            }
        }
        for(int i=1;i<=n;i++)
            if(find(i)==i)
                cnt++;
        cout<<cnt-1<<'\n';//最终答案为连通块数量-1
    }
    return 0;
}