← Home
#include<bits/stdc++.h>
#define F first
#define S second
using namespace std;
typedef pair<int,int> pr;
inline int rd(){
	int x=0,y=1;char c=getchar();
	for(;c<'0'||c>'9';c=getchar())if(c=='-')y=-1;
	for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+(c^48);
	return x*y;
}
const int N=5005;
int n,m,d[N][N],f[N],g[N];vector<int> vc[N];queue<int>q;
int main(){
    n=rd();m=rd();
    for(int x,y;m--;)x=rd(),y=rd(),vc[x].push_back(y);m=n;
    for(int i=1;i<=n;++i){
        for(int j=1;j<=n;++j)d[i][j]=1e9;q.push(i);d[i][i]=0;
        while(!q.empty()){
            int x=q.front();q.pop();
            for(int y:vc[x])if(d[i][y]>1e8)d[i][y]=d[i][x]+1,q.push(y);
        }
    }
    for(int i=1;i<=n;++i)for(int j=1;j<=i;++j)if(d[i][j]+d[j][i]<1e8){f[i]=j;break;}
    for(int i=1;i<=n;++i)g[f[i]]=1e9;
    for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)if(i!=j&&d[i][j]<1e8)
    {if(f[i]!=f[j])g[f[i]]=-1;else g[f[i]]=min(g[f[i]],d[i][j]+d[j][i]);}
    for(int i=1;i<=n;++i)if(g[f[i]]>1e8)g[f[i]]=-1;
    for(int i=1;i<=n;++i)if(i==f[i]&&g[i]!=-1)m+=998*g[i]+1;
    cout<<m;return 0;
}