We have a grid with N rows and N columns. The cell at the i-th row and j-th column is denoted (i, j).

Initially, M of the cells are painted black, and all other cells are white. Specifically, the cells (a_1, b_1), (a_2, b_2), ..., (a_M, b_M) are painted black.

Snuke will try to paint as many white cells black as possible, according to the following rule:

* If two cells (x, y) and (y, z) are both black and a cell (z, x) is white for integers 1≤x,y,z≤N, paint the cell (z, x) black.



Find the number of black cells when no more white cells can be painted black.

Constraints

* 1≤N≤10^5
* 1≤M≤10^5
* 1≤a_i,b_i≤N
* All pairs (a_i, b_i) are distinct.

Input

The input is given from Standard Input in the following format:


N M
a_1 b_1
a_2 b_2
:
a_M b_M


Output

Print the number of black cells when no more white cells can be painted black.

Examples

Input

3 2
1 2
2 3


Output

3


Input

2 2
1 1
1 2


Output

4


Input

4 3
1 2
1 3
4 4


Output

3
#include<bits/stdc++.h>
using namespace std;
#define N 200010
#define int long long
int h[N],v[N],nxt[N],ok=1,ec,w[N],c[N],vi[N],s,e,ans;
void add(int x,int y,int z){
	v[++ec]=y;
	w[ec]=z;
	nxt[ec]=h[x];
	h[x]=ec;
}
void dfs(int x,int d){
	vi[x]=d;
	c[d]++;
	s++;
	for(int i=h[x];i;i=nxt[i]){
		if(w[i]==1)e++;
		if(vi[v[i]]==-1)dfs(v[i],(d+w[i])%3);
		else if(vi[v[i]]!=(d+w[i])%3)ok=0;
	}
}
signed main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y;
		scanf("%lld%lld",&x,&y);
		add(x,y,1);
		add(y,x,2);
	}
	memset(vi,-1,sizeof(vi));
	for(int i=1;i<=n;i++)
		if(vi[i]==-1){
			ok=1;
			c[0]=c[1]=c[2]=0;
			s=e=0;
			dfs(i,0);
			if(ok){
				if(min(c[0],min(c[1],c[2]))==0)ans+=e;
				else ans+=c[0]*c[1]+c[1]*c[2]+c[2]*c[0];
			}
			else ans+=s*s;
		}
	cout<<ans;
}