#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int par[1005],rankk[1005];
void init(int n){
for(int i = 1;i<=n;++i){
par[i] = i;
rankk[i] = 0;
}
}
int find(int x){
if(par[x] == x)
return x;
else
return par[x] = find(par[x]);
}
void unite(int x,int y){
int a = find(x);
int b = find(y);
if(a == b)
return;
if(rankk[a]<rankk[b])
par[a] = b;
else{
par[b] = a;
if(rankk[a] == rankk[b])
++rankk[a];
}
}
int main(){
int t,a,b,n,m;
cin>>t;
while(t--){
cin>>n>>m;
init(n);
for(int i = 0;i<m;++i){
cin>>a>>b;
unite(a,b);
}
int ans = 0;
for(int i = 1;i<=n;++i){
if(par[i] == i)
++ans;
}
cout<<ans<<endl;
}
return 0;
}
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int par[1005],rankk[1005];
void init(int n){
for(int i = 1;i<=n;++i){
par[i] = i;
rankk[i] = 0;
}
}
int find(int x){
if(par[x] == x)
return x;
else
return par[x] = find(par[x]);
}
void unite(int x,int y){
int a = find(x);
int b = find(y);
if(a == b)
return;
if(rankk[a]<rankk[b])
par[a] = b;
else{
par[b] = a;
if(rankk[a] == rankk[b])
++rankk[a];
}
}
int main(){
int t,a,b,n,m;
cin>>t;
while(t--){
cin>>n>>m;
init(n);
for(int i = 0;i<m;++i){
cin>>a>>b;
unite(a,b);
}
int ans = 0;
for(int i = 1;i<=n;++i){
if(par[i] == i)
++ans;
}
cout<<ans<<endl;
}
return 0;
}