uses math;
const fi = '';
      fo = '';
      maxN = 20005;
      maxM = 50005;
var  u, v : array[0..maxM] of longint;
     ke : array[0..2*maxM] of longint;
     dau, is_khop : array[0..maxN] of longint;
     n, m, dfscount, rootcon, rootvertex, nCon : longint;
     num, low : array[0..maxN] of longint;
 
procedure init;
var i : longint;
begin
  readln(n,m);
  for i:=1 to m do
    begin
      readln(u[i],v[i]);
      inc(dau[u[i]]);
      inc(dau[v[i]]);
    end;
  for i:=2 to n do dau[i]:=dau[i-1]+dau[i];
  dau[n+1]:=2*m;
 
  for i:=1 to m do
    begin
      ke[dau[u[i]]]:=v[i];
      ke[dau[v[i]]]:=u[i];
      dec(dau[u[i]]);
      dec(dau[v[i]]);
    end;
end;
 
procedure visit(u : longint);
var v, i :longint;
begin
  inc(dfscount);
  low[u]:=dfscount;  num[u]:=dfscount;
  for i:=dau[u]+1 to dau[u+1] do
   begin
    v:=ke[i];
     if num[v]=0 then
       begin
         if u = rootvertex then inc(rootcon);
         visit(v);
         if low[v] >= num[u] then inc(is_khop[u])
         else low[u]:=min(low[u],low[v]);
       end
      else low[u]:=min(low[u],num[v]);
  end;
end;
 
procedure solve;
var u : longint;
begin
  dfscount:=0; nCon:=0;
  fillchar(is_khop,sizeof(is_khop),0);
  fillchar(num,sizeof(num),0);
   for u:=1 to n do
   if num[u]=0 then
     begin
       inc(nCon);
       visit(u);
       dec(is_khop[u]);
      end;
 
  for u:=1 to n do  writeln(is_khop[u]+nCon);
end;
 
begin
  assign(input,fi);reset(input);
  assign(output,fo);rewrite(output);
    init;
    solve;
  close(input);close(output);
end.