#include using namespace std; const int N=1e6+5; int n,m; int head[N],nxt[N],ver[N],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<=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; }