#include<bits/stdc++.h>
#include<queue>
#include<vector>
#define For(i,l,r) for(int i=l;i<=r;i++)
#define Rof(i,l,r) for(int i=l;i>=r;i--)
using namespace std;
#define P pair<int,int>
#define int long long
inline int input(){int x;return cin>>x,x;}
const int inf = 0x3f3f3f3f3f3f3f3f;
const int N = 201234;
vector<int> ft[N];
int n,m,a[N];
priority_queue<P> q;
int dis[N];
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
string str("path");
freopen((str+".in").c_str(),"r",stdin);
freopen((str+".out").c_str(),"w",stdout);
int Tim = clock();
cin>>n>>m;For(i,1,n) a[i]=input();
For(i,1,m){
int x=input(),y=input();
if(a[x]<=a[y]) ft[x].emplace_back(y);
if(a[x]>=a[y]) ft[y].emplace_back(x);
}
q.emplace(-a[1],1),dis[1]=1;
while(q.size()){
int x=q.top().second;q.pop();
for(auto y:ft[x]){
int v=(int)(a[y]!=a[x]);
if(dis[y]<dis[x]+v){
dis[y]=dis[x]+v;
q.emplace(-a[y],y);
}
}
}
cout<<(dis[n]==-inf?0:dis[n])<<'\n';
return cerr<<"TIME:"<<(clock()-Tim)/1024.,0;
}