#include using namespace std; int fa[100009], siz[100009]; int get(int x){ if (x==fa[x]) return x; return fa[x]=get(fa[x]); } void merge(int x, int y){ x=get(x); y=get(y); if (x==y) return ; fa[x]=y; siz[y]+=siz[x]; } int cnt[100009]; int dp[100009]; int main(){ for (int i=1; i<=100000; i++) fa[i]=i, siz[i]=1; memset(dp, 0x3f, sizeof dp); dp[0]=0; int n, m; scanf("%d%d", &n, &m); for (int i=1; i<=m; i++){ int u, v; scanf("%d%d", &u, &v); merge(u, v); } for (int i=1; i<=n; i++) if (fa[i]==i) cnt[siz[i]]++; for (int i=1; i<=n; i++) // \sqrt(n) for (int j=17; j>=0; j--){ // log(n) if (cnt[i]>=(1<=(1<