2017.12.23
#include <iostream>
#include <cstring>
using namespace std;
#define MAX 1000
int pre[MAX];
int con[MAX];
void init(int n){
for(int i = 1; i <= n; i++)
pre[i] = i;
}
int find(int x){
int root = x;
while(root != pre[root])
root = pre[root];
while(x != root){
int t = pre[x];
pre[x] = root;
x = t;
}
return root;
}
void join(int x, int y){
int xx = find(x);
int yy = find(y);
if(xx != yy)
pre[xx] = yy;
}
int main(){
int n, m;
int u, v;
int T;
cin >> T;
while(T--){
cin >> n >> m;
init(n);
while(m--){
cin >> u >> v;
join(u, v);
}
memset(con, 0, sizeof(con));
for(int i = 1; i <= n; i++){
con[find(i)] = 1;
}
int cnt = 0;
for(int i = 1; i <= n; i++){
if(con[i] == 1)
cnt++;
}
cout << cnt << endl;
}
return 0;
}