/* ***********************************************
Author :PeterBishop
Created Time :Sat 16 Feb 2019 21:23:18 CST
File Name :t.cpp
Origin :H D O J 1213
************************************************ */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map>
using namespace std;
struct node{
int p;
}S[1002];
void init(int n){
for(int i=1;i<=n;i++)
S[i].p=i;
}
int find(int x){
return x==S[x].p?x:find(S[x].p);
}
void join(node a,node b){
int r1=find(a.p);
int r2=find(b.p);
if(r1!=r2)
S[r1].p=r2;
}
int main()
{
freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int T,N,m;
while(cin>>T){
while(T--){
cin>>N>>m;
init(N);
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
join(S[a],S[b]);
}
int ans=0;
for(int i=1;i<=N;i++)
if(S[i].p==i)
ans++;
cout<<ans<<endl;
}
}
return 0;
}