rt
#include<bits/stdc++.h>
#define int long long
using namespace std;
void read(int &x){
x=0;char c=getchar();bool f=0;
while(c<48||c>'9'){
if(c=='-')f=1;
c=getchar();
}do{x=(x<<3)+(x<<1)+(c^48),c=getchar();}while(c>=48&&c<='9');
x=f?-x:x;
}
int n,m,a[100001],dp[100001],d[100001],x,y,z,p=-0x3f3f3f3f;
vector<int>v[100001];
void tp(){
queue<int>q;
for(int i=1;i<=n;i++)if(!d[i])q.push(i);
while(q.size()){
x=q.front();
q.pop();
for(auto i:v[x]){
if(a[i]<=a[x])dp[i]=max(dp[i],dp[x]+1);
d[i]--;
if(!d[i])q.push(i);
}
}return;
}
signed main(){
read(n),read(m);
for(int i=1;i<=n;i++)read(a[i]),dp[i]=1;
while(m--)read(x),read(y),v[x].push_back(y),d[y]++;
tp();
for(int i=1;i<=n;i++)p=max(dp[i],p);
cout<<p;
return 0;
}