#include using namespace std; const int N=1e5+10,INF=1e9; int n,m; int tot,vis[N],t[N]; int cnt,a[N],v[N],f[N]; vectormp[N]; void dfs(int x) { vis[x]=1,tot++; for(auto v:mp[x]) if(!vis[v])dfs(v); } int main() { cin>>n>>m; for(int i=1,u,v;i<=m;i++) { cin>>u>>v; mp[u].push_back(v); mp[v].push_back(u); } for(int i=1;i<=n;i++) if(!vis[i])tot=0,dfs(i),t[tot]++; for(int i=1;i<=n;i++) { if(t[i]==0)continue; for(int j=1;j<=t[i];j<<=1) t[i]-=j,cnt++,a[cnt]=j*i,v[cnt]=j; cnt++,a[cnt]=t[i]*i,v[cnt]=t[i]; } for(int i=1;i<=n;i++)f[i]=INF; f[0]=0; for(int i=1;i<=cnt;i++) for(int j=n;j>=a[i];j--) if(f[j-a[i]]!=INF) f[j]=min(f[j],f[j-a[i]]+v[i]); for(int i=1;i<=n;i++) if(f[i]==INF)cout<<-1<<"\n"; else cout<