#include<bits/stdc++.h> using namespace std; const int N=1e5+5; const int M=4e5+5; int n,m; int head[N],nxt[M],ver[M],tot; int siz[N],dcc,vis[N],cnt[N]; int w[N],p,f[N]; void add(int u,int v){ ver[++tot]=v; nxt[tot]=head[u]; head[u]=tot; } void dfs(int u){ siz[dcc]++,vis[u]=1; for(int i=head[u];i;i=nxt[i]){ int v=ver[i]; if(!vis[v]) dfs(v); } } void Add(int s,int n){ for(int i=1;i<=n;i*=2) w[++p]=i*s,n-=i; if(n) w[++p]=n*s; } int main(){ scanf("%d%d",&n,&m); while(m--){ int u,v;scanf("%d%d",&u,&v); add(u,v),add(v,u); } for(int i=1;i<=n;i++){ if(!vis[i]) ++dcc,dfs(i); } //for(int i=1;i<=dcc;i++) cout<<siz[i]<<" ";cout<<endl; for(int i=1;i<=dcc;i++) cnt[siz[i]]++; for(int i=1;i<=n;i++) Add(i,cnt[i]); memset(f,63,sizeof(f)),f[0]=0; for(int i=1;i<=p;i++){ for(int j=n;j>=w[i];j--) f[j]=min(f[j],f[j-w[i]]+1); } for(int i=1;i<=n;i++) printf("%d\n",(f[i]==f[N-1]?-1:f[i]-1)); return 0; }