#include<bits/stdc++.h>
using namespace std;
int n,m;
int h[1145140],ne[1145140],e[1145140],idx;
int w[1145140];
int stk[1145140],st[1145140],op;
int dfn[1145140],low[1145140];
int id[1145140],sid[1145140];
int scnt,tcnt;
int cnt[1145140];
int q[1145140],l,r;
int rr[1145140];
int f[1145140];
int ans;
map<pair<int,int>,int> un;
inline void add(int a,int b)
{
idx++;
ne[idx]=h[a];
e[idx]=b;
h[a]=idx;
}
inline void tarjan(int x)
{
//cout<<x<<" ";
dfn[x]=++tcnt;
low[x]=tcnt;
stk[++op]=x;
st[x]=1;
for(int i=h[x];i;i=ne[i])
{
int y=e[i];
//cout<<y<<' ';
if(!dfn[y])
{
tarjan(y);
low[x]=min(low[x],low[y]);
}
else if(st[y])
low[x]=min(low[x],dfn[y]);
}
if(dfn[x]==low[x])
{
int y;
++scnt;
do{//
y=stk[op--];//cout<<op<<' ';
st[y]=0;
id[y]=scnt;
sid[scnt]+=w[y];
} while(y!=x);
}
}
inline void bfs()
{
for(int i=1;i<=scnt;i++)
if(!rr[i])
q[r++]=i;
while(l<=r)
{
int x=q[l++];
//cout<<x<<' ';
f[x]+=sid[x];
ans=max(ans,f[x]);
for(int i=h[x+n];i;i=ne[i])
{
int y=e[i]-n;
f[y]=max(f[y],f[x]);
rr[y]--;
if(!rr[y])
q[r++]=y;
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>w[i];
for(int i=1;i<=m;i++)
{
int a,b;
cin>>a>>b;
add(a,b);
}
//cout<<1124523<<' ';
for(int i=1;i<=n;i++)
if(!dfn[i])
tarjan(i);
// cout<<"------------------"<<'\n';
for(int i=1;i<=n;i++)
for(int j=h[i];j;j=ne[j])
{
int y=e[j];
if(id[i]!=id[y]&&un[make_pair(id[i],id[y])]==0)
{
//cout<<id[i]<<' '<<id[y]<<'\n';
un[make_pair(id[i],id[y])]=1;
add(id[i]+n,id[y]+n);
rr[id[y]]++;
}
}
//for(int i=1;i<=n;i++)
//cout<<rr[i]<<' ';
//cout<<'\n';
bfs();
//cout<<'\n';
//for(int i=1;i<=scnt;i++)
// cout<<sid[i]<<' ';
//cout<<'\n';
cout<<ans;
return 0;
}