#include<bits/stdc++.h>
using namespace std;
void dfs(int **adj, int *visited, 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(adj, visited, i,node);
}
}
int main()
{
int tc, n, m, x, y, k, i, ans;
cin>>tc;
while(tc--)
{
ans=0;
cin>>n>>m;
int **adj=new int*[n];
int *visited=new int[n];
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(adj, visited, i,n);
}
}
cout<<ans<<endl;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgoKCgp2b2lkIGRmcyhpbnQgKiphZGosIGludCAqdmlzaXRlZCwgaW50IHYsIGludCBub2RlKQp7CiAgICAvL3ByaW50ZigiXG4lZCIsdik7CiAgICB2aXNpdGVkW3ZdPTE7CiAgICBmb3IoaW50IGk9MDsgaTxub2RlOyBpKyspCiAgICB7CiAgICAgICBpZighdmlzaXRlZFtpXSAmJiBhZGpbdl1baV09PTEpICAgZGZzKGFkaiwgdmlzaXRlZCwgaSxub2RlKTsKICAgIH0KfQoKCmludCBtYWluKCkKewogICAgaW50IHRjLCBuLCBtLCB4LCB5LCBrLCBpLCBhbnM7CgoKICAgIGNpbj4+dGM7CiAgICB3aGlsZSh0Yy0tKQogICAgewogICAgICAgIGFucz0wOwogICAgICAgIGNpbj4+bj4+bTsKCiAgICAgICAgaW50ICoqYWRqPW5ldyBpbnQqW25dOwogICAgICAgIGludCAqdmlzaXRlZD1uZXcgaW50W25dOwoKICAgICAgICBtZW1zZXQoYWRqLDAsc2l6ZW9mKGFkaikpOwogICAgICAgIG1lbXNldCh2aXNpdGVkLCBmYWxzZSwgc2l6ZW9mKHZpc2l0ZWQpKTsKCiAgICAgICAgZm9yKGk9MDtpPG07aSsrKQogICAgICAgIHsKICAgICAgICAgICAgY2luPj54Pj55OwogICAgICAgICAgICBhZGpbeF1beV09dHJ1ZTsKICAgICAgICAgICAgYWRqW3ldW3hdPXRydWU7CiAgICAgICAgfQoKICAgICAgICBmb3IoaT0wO2k8bjtpKyspCiAgICAgICAgewogICAgICAgICAgICBpZighdmlzaXRlZFtpXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYW5zKys7CiAgICAgICAgICAgICAgICBkZnMoYWRqLCB2aXNpdGVkLCBpLG4pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvdXQ8PGFuczw8ZW5kbDsKICAgIH0KfQo=