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>
#define ll long long
using namespace std;
const int N = 201000;
int h[4],col[N],n,m,flag;
ll ans;
struct edge{int v,w;};
vector<edge> e[N];
void dfs(int x){
	h[col[x]]++;
	for(auto v:e[x]){
		h[3]++;
		if(!~col[v.v]){
			col[v.v]=(col[x]+v.w)%3;
			dfs(v.v);
		}
		else if(col[v.v]!=(col[x]+v.w)%3) flag=0;
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++) col[i]=-1;
	for(int i=1;i<=m;i++){
		int x,y;cin>>x>>y;
		e[x].push_back({y,1});
		e[y].push_back({x,2});
	}
	for(int i=1;i<=n;i++)
		if(!~col[i]){
			memset(h,0,sizeof(h));
			col[i]=0; flag=1; dfs(i);h[3]/=2;
			if(!flag){
				ans+=1ll*(h[0]+h[1]+h[2])*(h[0]+h[1]+h[2]);
				continue;
			}
			if(!h[0]||!h[1]||!h[2]){
				ans+=h[3];
				continue;
			}
			ans+=1ll*h[0]*h[1];
			ans+=1ll*h[1]*h[2];
			ans+=1ll*h[2]*h[0];
		}
	cout<<ans<<'\n';
	return 0;
}
