#include<bits/stdc++.h>
using namespace std;
bool visited[10001];
int adj[10001][10001];
void dfs(int v, int node)
{
//printf("\n%d",v);
visited[v]=1;
for(int i=0; i<node; i++)
{
if(!visited[i] && adj[v][i]==1) dfs(i,node);
}
}
int main()
{
int tc, n, m, x, y, k, i, ans;
cin>>tc;
while(tc--)
{
ans=0;
cin>>n>>m;
memset(adj,0,sizeof(adj));
memset(visited, false, sizeof(visited));
for(i=0;i<m;i++)
{
cin>>x>>y;
adj[x][y]=true;
adj[y][x]=true;
}
for(i=0;i<n;i++)
{
if(!visited[i])
{
ans++;
dfs(i,n);
}
}
cout<<ans<<endl;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApib29sIHZpc2l0ZWRbMTAwMDFdOwppbnQgYWRqWzEwMDAxXVsxMDAwMV07CiAKIAp2b2lkIGRmcyhpbnQgdiwgaW50IG5vZGUpCnsKICAgIC8vcHJpbnRmKCJcbiVkIix2KTsKICAgIHZpc2l0ZWRbdl09MTsKICAgIGZvcihpbnQgaT0wOyBpPG5vZGU7IGkrKykKICAgIHsKICAgICAgIGlmKCF2aXNpdGVkW2ldICYmIGFkalt2XVtpXT09MSkgICBkZnMoaSxub2RlKTsKICAgIH0KfQogCiAKaW50IG1haW4oKQp7CiAgICBpbnQgdGMsIG4sIG0sIHgsIHksIGssIGksIGFuczsKIAogICAgY2luPj50YzsKICAgIHdoaWxlKHRjLS0pCiAgICB7CiAgICAgICAgYW5zPTA7CiAgICAgICAgY2luPj5uPj5tOwogCiAgICAgICAgbWVtc2V0KGFkaiwwLHNpemVvZihhZGopKTsKICAgICAgICBtZW1zZXQodmlzaXRlZCwgZmFsc2UsIHNpemVvZih2aXNpdGVkKSk7CiAKICAgICAgICBmb3IoaT0wO2k8bTtpKyspCiAgICAgICAgewogICAgICAgICAgICBjaW4+Png+Pnk7CiAgICAgICAgICAgIGFkalt4XVt5XT10cnVlOwogICAgICAgICAgICBhZGpbeV1beF09dHJ1ZTsKICAgICAgICB9CiAKICAgICAgICBmb3IoaT0wO2k8bjtpKyspCiAgICAgICAgewogICAgICAgICAgICBpZighdmlzaXRlZFtpXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYW5zKys7CiAgICAgICAgICAgICAgICBkZnMoaSxuKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb3V0PDxhbnM8PGVuZGw7CiAgICB9Cn0KIA==