import sys
sys.setrecursionlimit(2*(10**5))
import threading
threading.stack_size(2**26)
from sys import stdin, stdout
def ain():
return map(int,sin().split())
def sin():
return stdin.readline().strip()
"""**************************************************************************"""
def main():
def dfs(v,pv):
p[v]=1
id[0]+=1
low[v]=id[0]
ids[v]=id[0]
for to in ad[v]:
if(to==pv):
continue
if(p[to]!=1):
dfs(to,v)
low[v]=min(low[v],low[to])
if(ids[v]<low[to]):
a=v
b=to
if(a>b):
a,b=b,a
bri.add((a,b))
else:
low[v]=min(low[v],low[to])
n,m=ain()
ad=[[] for i in range(n+1)]
q1=set()
for i in range(m):
x,y=ain()
if(x>y):
x,y=y,x
q1.add((x,y))
ad[x].append(y)
ad[y].append(x)
p=[0]*(n+1)
id=[0]
low=[0]*(n+1)
ids=[0]*(n+1)
bri=set()
dfs(1,0)
q={}
indc=[{} for i in range(n+1)]
for i in range(1,n+1):
for j in ad[i]:
if(indc[i].has_key(len(ad[j]))):
indc[i][len(ad[j])]+=1
else:
indc[i][len(ad[j])]=1
for i in q1:
a=len(ad[i[0]])
b=len(ad[i[1]])
if(a>b):
a,b=b,a
if(q.has_key((a,b))):
q[(a,b)]+=1
else:
q[(a,b)]=1
f=[0]*n
for i in range(1,n+1):
f[len(ad[i])]+=1
s=0
for i in q1:
if(i in bri):
continue
a=i[0]
b=i[1]
a1=len(ad[a])
b1=len(ad[b])
k=0
if(indc[a].has_key(b1-1)):
k+=indc[a][b1-1]
if(indc[b].has_key(a1-1)):
k+=indc[b][a1-1]
if((a1+1)==b1):
if(indc[a].has_key(a1-1)):
k-=indc[a][a1-1]
if((b1+1)==a1):
if(indc[b].has_key(b1-1)):
k-=indc[b][b1-1]
if(a1>b1):
a1,b1=b1,a1
f[a1]-=1
f[b1]-=1
f[a1-1]+=1
f[b1-1]+=1
if(a1!=b1):
p=f[a1-1]*f[b1-1]
p-=1
else:
p=(f[a1-1]*(f[a1-1]-1))/2
p-=1
if(q.has_key((a1-1,b1-1))):
p-=q[(a1-1,b1-1)]
p-=k
s+=p
f[a1]+=1
f[b1]+=1
f[a1-1]-=1
f[b1-1]-=1
print s
threading.Thread(target=main).start()
aW1wb3J0IHN5cwpzeXMuc2V0cmVjdXJzaW9ubGltaXQoMiooMTAqKjUpKQppbXBvcnQgdGhyZWFkaW5nCnRocmVhZGluZy5zdGFja19zaXplKDIqKjI2KQpmcm9tIHN5cyBpbXBvcnQgc3RkaW4sIHN0ZG91dApkZWYgYWluKCk6CiAgICByZXR1cm4gbWFwKGludCxzaW4oKS5zcGxpdCgpKQpkZWYgc2luKCk6CiAgICByZXR1cm4gc3RkaW4ucmVhZGxpbmUoKS5zdHJpcCgpCiIiIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIiIiCmRlZiBtYWluKCk6CiAgICBkZWYgZGZzKHYscHYpOgogICAgICAgIHBbdl09MQogICAgICAgIGlkWzBdKz0xCiAgICAgICAgbG93W3ZdPWlkWzBdCiAgICAgICAgaWRzW3ZdPWlkWzBdCiAgICAgICAgZm9yIHRvIGluIGFkW3ZdOgogICAgICAgICAgICBpZih0bz09cHYpOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYocFt0b10hPTEpOgogICAgICAgICAgICAgICAgZGZzKHRvLHYpCiAgICAgICAgICAgICAgICBsb3dbdl09bWluKGxvd1t2XSxsb3dbdG9dKQogICAgICAgICAgICAgICAgaWYoaWRzW3ZdPGxvd1t0b10pOgogICAgICAgICAgICAgICAgICAgIGE9dgogICAgICAgICAgICAgICAgICAgIGI9dG8KICAgICAgICAgICAgICAgICAgICBpZihhPmIpOgogICAgICAgICAgICAgICAgICAgICAgICBhLGI9YixhCiAgICAgICAgICAgICAgICAgICAgYnJpLmFkZCgoYSxiKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGxvd1t2XT1taW4obG93W3ZdLGxvd1t0b10pCiAgICBuLG09YWluKCkKICAgIGFkPVtbXSBmb3IgaSBpbiByYW5nZShuKzEpXQogICAgcTE9c2V0KCkKICAgIGZvciBpIGluIHJhbmdlKG0pOgogICAgICAgIHgseT1haW4oKQogICAgICAgIGlmKHg+eSk6CiAgICAgICAgICAgIHgseT15LHgKICAgICAgICBxMS5hZGQoKHgseSkpCiAgICAgICAgYWRbeF0uYXBwZW5kKHkpCiAgICAgICAgYWRbeV0uYXBwZW5kKHgpCiAgICBwPVswXSoobisxKQogICAgaWQ9WzBdCiAgICBsb3c9WzBdKihuKzEpCiAgICBpZHM9WzBdKihuKzEpCiAgICBicmk9c2V0KCkKICAgIGRmcygxLDApCiAgICBxPXt9CiAgICBpbmRjPVt7fSBmb3IgaSBpbiByYW5nZShuKzEpXQogICAgZm9yIGkgaW4gcmFuZ2UoMSxuKzEpOgogICAgICAgIGZvciBqIGluIGFkW2ldOgogICAgICAgICAgICBpZihpbmRjW2ldLmhhc19rZXkobGVuKGFkW2pdKSkpOgogICAgICAgICAgICAgICAgaW5kY1tpXVtsZW4oYWRbal0pXSs9MQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgaW5kY1tpXVtsZW4oYWRbal0pXT0xCiAgICBmb3IgaSBpbiBxMToKICAgICAgICBhPWxlbihhZFtpWzBdXSkKICAgICAgICBiPWxlbihhZFtpWzFdXSkKICAgICAgICBpZihhPmIpOgogICAgICAgICAgICBhLGI9YixhCiAgICAgICAgaWYocS5oYXNfa2V5KChhLGIpKSk6CiAgICAgICAgICAgIHFbKGEsYildKz0xCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcVsoYSxiKV09MQogICAgZj1bMF0qbgogICAgZm9yIGkgaW4gcmFuZ2UoMSxuKzEpOgogICAgICAgIGZbbGVuKGFkW2ldKV0rPTEKICAgIHM9MAogICAgZm9yIGkgaW4gcTE6CiAgICAgICAgaWYoaSBpbiBicmkpOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGE9aVswXQogICAgICAgIGI9aVsxXQogICAgICAgIGExPWxlbihhZFthXSkKICAgICAgICBiMT1sZW4oYWRbYl0pCiAgICAgICAgaz0wCiAgICAgICAgaWYoaW5kY1thXS5oYXNfa2V5KGIxLTEpKToKICAgICAgICAgICAgays9aW5kY1thXVtiMS0xXQogICAgICAgIGlmKGluZGNbYl0uaGFzX2tleShhMS0xKSk6CiAgICAgICAgICAgIGsrPWluZGNbYl1bYTEtMV0KICAgICAgICBpZigoYTErMSk9PWIxKToKICAgICAgICAgICAgaWYoaW5kY1thXS5oYXNfa2V5KGExLTEpKToKICAgICAgICAgICAgICAgIGstPWluZGNbYV1bYTEtMV0KICAgICAgICBpZigoYjErMSk9PWExKToKICAgICAgICAgICAgaWYoaW5kY1tiXS5oYXNfa2V5KGIxLTEpKToKICAgICAgICAgICAgICAgIGstPWluZGNbYl1bYjEtMV0KICAgICAgICBpZihhMT5iMSk6CiAgICAgICAgICAgIGExLGIxPWIxLGExCiAgICAgICAgZlthMV0tPTEKICAgICAgICBmW2IxXS09MQogICAgICAgIGZbYTEtMV0rPTEKICAgICAgICBmW2IxLTFdKz0xCiAgICAgICAgaWYoYTEhPWIxKToKICAgICAgICAgICAgcD1mW2ExLTFdKmZbYjEtMV0KICAgICAgICAgICAgcC09MQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHA9KGZbYTEtMV0qKGZbYTEtMV0tMSkpLzIKICAgICAgICAgICAgcC09MQogICAgICAgIGlmKHEuaGFzX2tleSgoYTEtMSxiMS0xKSkpOgogICAgICAgICAgICBwLT1xWyhhMS0xLGIxLTEpXQogICAgICAgIHAtPWsKICAgICAgICBzKz1wCiAgICAgICAgZlthMV0rPTEKICAgICAgICBmW2IxXSs9MQogICAgICAgIGZbYTEtMV0tPTEKICAgICAgICBmW2IxLTFdLT0xCiAgICBwcmludCBzCnRocmVhZGluZy5UaHJlYWQodGFyZ2V0PW1haW4pLnN0YXJ0KCk=