#include using namespace std; const int N = 4e5+10; int n,m; int fa[N]; struct ball{ int b,c; }balls[N]; int find(int x){ if(fa[x] == x){ return x; }return fa[x] = find(fa[x]); } void unite(int x,int y){ int nx = find(x),ny = find(y); if(nx != ny){ fa[ny] = nx; } } signed main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n>>m; for(int i = 1;i<=m+n;i++){ fa[i] = i; } unordered_set boxst; for(int i = 1;i<=n;i++){ cin>>balls[i].b>>balls[i].c; int box = balls[i].b; int color = balls[i].c + m; boxst.insert(box); unite(box,color); } unordered_set kuai; for(int i = 1;i<=n;i++){ int box= balls[i].b; int color = balls[i].c + m; kuai.insert(find(box)); kuai.insert(find(color)); } int ans = boxst.size() - kuai.size(); cout<