const   fi='';
        nmax=40000;
        mmax=100000;
type
        data=longint;
        data1=longint;
var
        f:text;
        n,m:data;
        head:array[0..nmax+1] of data1;
        adj:array[0..mmax*2] of data1;
        loaidinh,DD:array[0..nmax] of boolean;
        A,B:array[0..2*mmax] of data1;

procedure sort(l,r: longint);
      var
         i,j: longint;
         x,y:data1;
      begin
         i:=l;
         j:=r;
         x:=a[(l+r) div 2];
         repeat
           while a[i]<x do
            inc(i);
           while x<a[j] do
            dec(j);
           if not(i>j) then
             begin
                y:=a[i]; a[i]:=a[j]; a[j]:=y;
                y:=b[i]; b[i]:=b[j]; b[j]:=y;
                inc(i);
                j:=j-1;
             end;
         until i>j;
         if l<j then
           sort(l,j);
         if i<r then
           sort(i,r);
      end;



procedure docfile;
var     i,j:data;
        u,v:data1;
        dem:data;
begin
        assign(f,fi); reset(f);
        readln(f,n,m);
        head[0]:=0;
        for i:=1 to m do
                begin
                        readln(f,u,v);
                        A[(i-1)*2+1]:=u;
                        B[(i-1)*2+1]:=v;
                        A[(i-1)*2+2]:=v;
                        B[(i-1)*2+2]:=u;
                end;
        close(f);
        sort(1,2*m);
        head[0]:=0;
        for i:=1 to 2*m do
                begin
                        adj[i]:=b[i];
                        inc(head[a[i]]);
                end;
        for i:=1 to n do
                head[i]:=head[i-1]+head[i];
end;

procedure init;
var     i:data;
begin
        for i:=1 to n do dd[i]:=false;
end;

procedure dfs(i:data);
var     j:data;
begin
        if loaidinh[i] then
                exit;
        dd[i]:=true;
        for j:=head[i-1]+1 to head[i] do
                if not (dd[adj[j]]) then
                        dfs(adj[j]);
end;

function STPLT:data;
var     i:data;
        s:data;
begin
        s:=0;
        init;
        for i:=1 to n do
                if not dd[i] then
                        begin
                                inc(s);
                                dfs(i);
                        end;
        exit(s);
end;

procedure xuli;
var     i:data;
begin
        for i:=1 to n do
                loaidinh[i]:=false;

        for i:=1 to n do
                begin
                        loaidinh[i]:=true;
                        writeln(stplt-1);
                        loaidinh[i]:=false;
                end;
end;

begin
        docfile;
        xuli;