#include<bits/stdc++.h>
using namespace std;
vector <long long> a[100005];
bool visited[100005];
long long n,m;
void bfs(long long i, vector<long long> a[], bool visited[])
{
queue<long long> q;
q.push(i);
visited[i] = true;
while (!q.empty())
{
long long u = q.front();
q.pop();
for (long long v : a[u])
{
if (!visited[v])
{
visited[v] = true;
q.push(v);
}
}
}
}
void input()
{
cin >> n >> m;
for (long long i=1; i<=m; i++)
{
long long u,v;
cin >> u >> v;
a[u].push_back(v);
a[v].push_back(u);
}
}
void solve()
{
for (long long i=1; i<=n; i++)
{
visited[i]=false;
}
long long cnt = 0;
for (long long i = 1; i <= n; i++)
{
if (!visited[i])
{
cnt++;
bfs(i,a,visited);
}
}
cout << cnt;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
input();
solve();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdmVjdG9yIDxsb25nIGxvbmc+IGFbMTAwMDA1XTsKYm9vbCB2aXNpdGVkWzEwMDAwNV07CmxvbmcgbG9uZyBuLG07CnZvaWQgYmZzKGxvbmcgbG9uZyBpLCB2ZWN0b3I8bG9uZyBsb25nPiBhW10sIGJvb2wgdmlzaXRlZFtdKQp7CiAgICBxdWV1ZTxsb25nIGxvbmc+IHE7CgogICAgcS5wdXNoKGkpOwogICAgdmlzaXRlZFtpXSA9IHRydWU7CiAgICB3aGlsZSAoIXEuZW1wdHkoKSkKICAgIHsKICAgICAgICBsb25nIGxvbmcgdSA9IHEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwogICAgICAgIGZvciAobG9uZyBsb25nIHYgOiBhW3VdKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCF2aXNpdGVkW3ZdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2aXNpdGVkW3ZdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHEucHVzaCh2KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQp2b2lkIGlucHV0KCkKewogICAgY2luID4+IG4gPj4gbTsKICAgIGZvciAobG9uZyBsb25nIGk9MTsgaTw9bTsgaSsrKQogICAgewogICAgICAgIGxvbmcgbG9uZyB1LHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICBhW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBhW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KfQp2b2lkIHNvbHZlKCkKewogICAgZm9yIChsb25nIGxvbmcgaT0xOyBpPD1uOyBpKyspCiAgICB7CiAgICAgICAgdmlzaXRlZFtpXT1mYWxzZTsKICAgIH0KICAgIGxvbmcgbG9uZyBjbnQgPSAwOwogICAgZm9yIChsb25nIGxvbmcgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIGlmICghdmlzaXRlZFtpXSkKICAgICAgICB7CiAgICAgICAgICAgIGNudCsrOwogICAgICAgICAgICBiZnMoaSxhLHZpc2l0ZWQpOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgY250Owp9CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBpbnB1dCgpOwogICAgc29sdmUoKTsKfQo=