#include<bits/stdc++.h> using namespace std; const int N=350,M=1e5+5; int n,m,v[N],w[N],s[N],f[N][M],q[M],hd,tl; int n_,m_,fa[M],siz[M]; map<int,int> mp; int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);} void merge(int x,int y) { x=find(x);y=find(y); if(x==y) return; fa[x]=y;siz[y]+=siz[x]; } int main() { cin>>n_>>m_; for(int i=1;i<=n_;i++) fa[i]=i,siz[i]=1; for(int i=1,u,v;i<=m_;i++) cin>>u>>v,merge(u,v); for(int i=1;i<=n_;i++) if(find(i)==i) mp[siz[i]]++; for(auto p:mp) n++,v[n]=p.first,w[n]=-1,s[n]=p.second; m=n_; memset(f,-0x3f,sizeof(f)); f[0][0]=0; for(int i=1;i<=n;i++) for(int j=0;j<v[i];j++) { hd=0,tl=-1; for(int k=j;k<=m;k+=v[i]) { for(;hd<=tl&&k-q[hd]>s[i]*v[i];hd++); for(;hd<=tl&&f[i-1][q[tl]]+(k-q[tl])/v[i]*w[i]<=f[i-1][k];tl--); q[++tl]=k; f[i][k]=f[i-1][q[hd]]+(k-q[hd])/v[i]*w[i]; } } for(int i=1;i<=m;i++) if(f[n][i]<-n_) cout<<"-1\n"; else cout<<-f[n][i]-1<<endl; return 0; }