//并查集,求共有几个不想相关集合
#include <iostream>
using namespace std;
const int MAX=1010;
int t,n,m;
int mark[MAX];
int Find(int x){
return mark[x];
}
void Merge(int a,int b){
int mmax,mmin,i,temp;
mmax=Find(a);
mmin=Find(b);
if(mmax==mmin)
return;
if(mmin>mmax){
temp=mmax;
mmax=mmin;
mmin=temp;
}
for(i=1;i<=n;i++){
if(mark[i]==mmax){
mark[i]=mmin;
}
}
}
void Solve(){
int a,b,sum=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
mark[i]=i;
}
while(m--){
scanf("%d%d",&a,&b);
Merge(a,b);
}
for(i=1;i<=n;i++){
if(mark[i]==i){
sum++;
}
}
printf("%d\n",sum);
}
int main(){
while(scanf("%d",&t)!=EOF){
while(t--){
Solve();
}
}
return 0;
}