11724
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> graph;
vector<bool> vis;
void bfs(int start)
{
queue<int> q;
q.push(start);
vis[start] = true;
while(!q.empty())
{
int current = q.front();
q.pop();
for(int next : graph[current])
{
if(!vis[next])
{
vis[next] = true;
q.push(next);
}
}
}
}
int main()
{
int n, m;
cin >> n >> m;
graph.resize(n+1); //정점이 1부터 시작하기때문
vis.resize(n+1);
for(int i = 0; i < m; i++)
{
int u, v;
cin >> u >> v;
graph[u].push_back(v);
graph[v].push_back(u);
}
int count = 0;
for(int i = 1; i <= n; i++) //BFS를 도는횟수를 맞추기위함
{
if(!vis[i])
{
bfs(i);
count++;
}
}
cout << count << endl;
return 0;
}