#include using namespace std; int a[1000005],b[1000005],c[200005]; int w[20005],s[10005],tmp; int f[100005]; int n,m; int find(int x){ if(a[x]==x)return x; return a[x]=find(a[x]); } int get(int l,int r){ l=find(l),r=find(r); if(l==r)return 0; if(l>r)swap(l,r); a[r]=l; return 0; } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)a[i]=i; for(int i=1;i<=m;i++){ int l,r; scanf("%d%d",&l,&r); get(l,r); } for(int i=1;i<=n;i++)c[find(a[i])]++; for(int i=1;i<=n;i++)b[c[i]]++; for(int i=1;i<=m;i++){ int q=1; while(b[i]>=q){ b[i]-=q; w[++tmp]=q*i,s[tmp]=q; } if(b[i])w[++tmp]=b[i]*i,s[tmp]=b[i]; b[i]=0; } for(int i=1;i<=n;i++)f[i]=1e9; for(int j=1;j<=tmp;j++){ for(int i=n;i>=w[i];i--) f[i]=min(f[i-w[j]]+s[j],f[i]); } for(int i=1;i<=n;i++) if(f[i]==1e9)printf("-1\n"); else printf("%d\n",f[i]-1); return 0; }