#include #define int long long using namespace std; struct UnionFind{ vectorpar; UnionFind(int n):par(n,-1){} int find(int x){return par[x]<0?x:par[x]=find(par[x]);} void merge(int x,int y){ x=find(x);y=find(y); if(x==y)return; if(par[x]>par[y])swap(x,y); par[x]+=par[y];par[y]=x; } int size(int x){return max(-par[x],1ll);} }; signed main(){ int N,M;cin>>N>>M; vector>V(N); for(int i=0;i>b>>c; V[--c].push_back(--b); } UnionFind UF(M); for(int i=0;i