暂时只给出代码
```cpp
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
vector<int> e[maxn];
int n,m,a[maxn];
int dist[maxn];
bool vis[maxn];
void get_dfs(int u){
vis[u]=1;
for(int i=0;i<e[u].size();++i){int j=e[u][i];if(vis[j]==1)continue;
if(a[u]<a[j] && dist[u]+1>dist[j])dist[j]=dist[u]+1,get_dfs(j);
if(a[u]==a[j] && dist[u]>dist[j])dist[j]=dist[u],get_dfs(j);
}
vis[u]=0;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;++i) cin>>a[i];
for(int i=1,x,y;i<=m;++i){
cin>>x>>y;
if(a[x]<=a[y]){
e[x].push_back(y);
}
if(a[y]<=a[x]){
e[y].push_back(x);
}
}
for(int i=1;i<=n;++i)sort(e[i].begin(),e[i].end(),[](int x,int y){return a[x]<a[y];});
dist[1]=1;get_dfs(1);
printf("%d\n",dist[n]);
return 0;
}
```