#include using namespace std; long long n,m,vis[100005],Pow[30],cnt,Size,A[100005],w[100005],num[100005],k,f[100005],B[100005]; vectore[100005]; void dfs(int x) { vis[x]=1,Size++; for(auto v:e[x]) if(!vis[v]) dfs(v); } int main() { cin>>n>>m,Pow[0]=1; for(int i=1;i<=25;i++) Pow[i]=Pow[i-1]*2; for(int i=1;i<=m;i++) { int x,y; cin>>x>>y,e[x].push_back(y),e[y].push_back(x); } for(int i=1;i<=n;i++) if(!vis[i]) Size=0,dfs(i),A[++cnt]=Size; sort(A+1,A+cnt+1); for(int i=1;i<=cnt;i++) if(A[i]!=A[i-1]) w[++k]=A[i],num[k]=1; else num[k]++; memset(A,0,sizeof A),cnt=0; for(int i=1;i<=k;i++) { for(int j=0;j<=25;j++) if(num[i]>=Pow[j]) num[i]-=Pow[j],A[++cnt]=w[i]*Pow[j],B[cnt]=Pow[j]; if(num[i]) A[++cnt]=w[i]*num[i],B[cnt]=num[i]; } memset(f,0x3f,sizeof f),f[0]=0; for(int i=1;i<=cnt;i++) for(int j=n;j>=A[i];j--) f[j]=min(f[j],f[j-A[i]]+B[i]); for(int i=1;i<=n;i++) if(f[i]==0x3f3f3f3f3f3f3f3f) cout<<"-1\n"; else cout<