#include<bits/stdc++.h>
using namespace std;
// Path option optimization : Tối ưu nén đường
// Tối ưu gộp kích thước
int n ;
const int maxn = 1005;
int parent[1000001],sz[maxn];
void ktao(){
cin >> n ;
for(int i = 1 ; i <= n ; i++){
parent[i] = i;
}
}
int Find(int u){
while(u != parent[u]){
u = parent[u];
}
return u;
}
/*
int Find(int u){
if(u == parent[u]) return u ;
else return parent[u] = Find(parent[u]);
}
*/
bool Union(int u,int v){
u = Find(u);
v = Find(v);
if(u == v){
return false;
}
else{
if(u < v) parent[v] = u;
else parent[u] = v;
return true;
}
}
/*bool Union(int u,int v){
u = Find(u);
v = Find(v);
if(u == v) return false;
if(sz[u] < sz[v]){
swap(u,v);
}
sz[u] += sz[v];
parent[v] = u;
return true;
}*/
int main(){
ktao();
int m; cin >> m ;
for(int i = 1 ; i <= m ; i++){
int x,y;
cin >> x >> y;
Union(x,y);
}
set<int> se;
for(int i = 1 ; i <= n ; i++){
se.insert(parent[i]);
}
cout << se.size();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLy8gUGF0aCBvcHRpb24gb3B0aW1pemF0aW9uIDogVOG7kWkgxrB1IG7DqW4gxJHGsOG7nW5nCi8vIFThu5FpIMawdSBn4buZcCBrw61jaCB0aMaw4bubYwppbnQgbiA7CmNvbnN0IGludCBtYXhuID0gMTAwNTsKaW50IHBhcmVudFsxMDAwMDAxXSxzelttYXhuXTsKCnZvaWQga3RhbygpewogICAgY2luID4+IG4gOwogICAgZm9yKGludCBpID0gMSA7IGkgPD0gbiA7IGkrKyl7CiAgICAgICAgcGFyZW50W2ldID0gaTsKICAgIH0KfQoKaW50IEZpbmQoaW50IHUpewogICAgd2hpbGUodSAhPSBwYXJlbnRbdV0pewogICAgICAgIHUgPSBwYXJlbnRbdV07CiAgICB9CiAgICByZXR1cm4gdTsKfQovKgppbnQgRmluZChpbnQgdSl7CiAgICBpZih1ID09IHBhcmVudFt1XSkgcmV0dXJuIHUgOwogICAgZWxzZSByZXR1cm4gcGFyZW50W3VdID0gRmluZChwYXJlbnRbdV0pOwp9CiovCgpib29sIFVuaW9uKGludCB1LGludCB2KXsKICAgIHUgPSBGaW5kKHUpOwogICAgdiA9IEZpbmQodik7CiAgICBpZih1ID09IHYpewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGVsc2V7CiAgICAgICAgaWYodSA8IHYpIHBhcmVudFt2XSA9IHU7CiAgICAgICAgZWxzZSBwYXJlbnRbdV0gPSB2OwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9Ci8qYm9vbCBVbmlvbihpbnQgdSxpbnQgdil7CiAgICB1ID0gRmluZCh1KTsKICAgIHYgPSBGaW5kKHYpOwogICAgaWYodSA9PSB2KSByZXR1cm4gZmFsc2U7CiAgICBpZihzelt1XSA8IHN6W3ZdKXsKICAgICAgICBzd2FwKHUsdik7CiAgICB9CiAgICBzelt1XSArPSBzelt2XTsKICAgIHBhcmVudFt2XSA9IHU7CiAgICByZXR1cm4gdHJ1ZTsKfSovCmludCBtYWluKCl7CiAgICBrdGFvKCk7CiAgICBpbnQgbTsgY2luID4+IG0gOwogICAgZm9yKGludCBpID0gMSA7IGkgPD0gbSA7IGkrKyl7CiAgICAgICAgaW50IHgseTsKICAgICAgICBjaW4gPj4geCA+PiB5OwogICAgICAgIFVuaW9uKHgseSk7CiAgICB9CiAgICBzZXQ8aW50PiBzZTsKICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IG4gOyBpKyspewogICAgICAgIHNlLmluc2VydChwYXJlbnRbaV0pOwogICAgfQogICAgY291dCA8PCBzZS5zaXplKCk7Cn0K