#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=0; j<=17; j++) // log(n) if (cnt[i]>=(1<=(1<0){ for (int k=n; k>=cnt[i]*i; k--) dp[k]=min(dp[k], dp[k-cnt[i]*i]+cnt[i]); } } for (int i=1; i<=n; i++) if (dp[i]<1e9) printf("%d\n", dp[i]-1); else printf("-1\n"); return 0; }