#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e6+10;
int n,m,cut[maxn],siz[maxn],ans[maxn];
struct edge{
int to,nxt;
}d[maxn]; int head[maxn],cnt=1;
void add(int u,int v){
d[++cnt]=(edge){v,head[u]},head[u]=cnt;
}
int low[maxn],dfn[maxn],id;
void tarjan(int u)
{
low[u]=dfn[u]=++id;
siz[u]=1;
int flag=0,sumn=0;
for(int i=head[u];i;i=d[i].nxt )
{
int v=d[i].to;
if( !dfn[v] )
{
tarjan(v);
siz[u]+=siz[v];
low[u]=min( low[u],low[v] );
if( low[v]>=dfn[u] )//u是割点
{
ans[u]+=siz[v]*( n-siz[v] );//v是子树
sumn+=siz[v];//总儿子数
flag++;
if( u!=1||flag>1 ) cut[u]=1;
}
}
else low[u]=min( low[u],dfn[v] );
}
if( cut[u] ) ans[u]+=(n-sumn-1)*(sumn+1)+(n-1);
else ans[u]=2*(n-1);
}
signed main()
{
cin >> n >> m;
for(int i=1;i<=m;i++)
{
int l,r; cin >> l >> r;
add(l,r); add(r,l);
}
tarjan(1);
for(int i=1;i<=n;i++)
cout << ans[i] << '\n';
}