1 #include<iostream>
2 #include<cstdio>
3 #include<cmath>
4 #include<cstring>
5 #define ll long long
6 #define inf 1000000000
7 using namespace std;
8 inline int read()
9 {
10 int x=0,f=1;char ch=getchar();
11 while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
12 while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
13 return x*f;
14 }
15 int n,m,cnt1,cnt2,ans;
16 int u[50005],v[50005];
17 int head[5005],h[5005],f[5005],g[5005],r[5005];
18 struct edge1{int to,next;}e[50005];
19 struct edge2{int to,next;}ed[50005];
20 void insert(int u,int v)
21 {
22 e[++cnt1].to=v;e[cnt1].next=head[u];head[u]=cnt1;
23 ed[++cnt2].to=u;ed[cnt2].next=h[v];h[v]=cnt2;
24 }
25 void dp1(int x)
26 {
27 if(!head[x]){f[x]=1;return;}
28 for(int i=head[x];i;i=e[i].next)
29 {
30 if(!f[e[i].to])dp1(e[i].to);
31 f[x]+=f[e[i].to];
32 }
33 }
34 void dp2(int x)
35 {
36 if(!h[x]){g[x]=1;return;}
37 for(int i=h[x];i;i=ed[i].next)
38 {
39 if(!g[ed[i].to])dp2(ed[i].to);
40 g[x]+=g[ed[i].to];
41 }
42 }
43 int main()
44 {
45 n=read();m=read();
46 for(int i=1;i<=m;i++)
47 {
48 u[i]=read();v[i]=read();
49 insert(u[i],v[i]);
50 }
51 for(int i=1;i<=n;i++)
52 if(!f[i])dp1(i);
53 dp2(n);
54 for(int i=1;i<=m;i++)
55 ans=max(ans,g[u[i]]*f[v[i]]);
56 printf("%d\n",ans);
57 return 0;
58 }