#include using namespace std; const int N=1e5+5,M=4e5+5; int head[N],cnt;struct node{int nxt,to;}g[M]; void add(int u,int v){g[++cnt]={head[u],v};head[u]=cnt;} int n,m,a[N],siz,f[N];bool vis[N]; void dfs(int u){ ++siz;vis[u]=1; for(int i=head[u];i;i=g[i].nxt){ int v=g[i].to; if(vis[v]) continue; dfs(v); } } signed main(){ scanf("%d%d",&n,&m); for(int i=1,u,v;i<=m;i++){ scanf("%d%d",&u,&v); add(u,v);add(v,u); } for(int i=1;i<=n;i++)if(!vis[i]){ siz=0; dfs(i); a[++a[0]]=siz; } // puts("ylcccx"); // for(int i=1;i<=a[0];i++) cout<=a[i];j--) f[j]=min(f[j],f[j-a[i]]+1); for(int i=1;i<=n;i++) if(f[i]>1e9) puts("-1"); else printf("%d\n",f[i]); return 0; }