#include #define rep(i,n) for(int i=0;iG[200000]; int h[200000],d1[200000],d2[200000]; void b(int s,int* d){ queueq; d[s]=0; q.push(s); while(q.size()){ int v=q.front(); q.pop(); for(auto e:G[v]){ if(h[v]>n>>m; rep(i,n)cin>>h[i]; rep(i,m){ int a,b; cin>>a>>b; G[--a].push_back(--b); G[b].push_back(a); } fill(d1,d1+n,-1e9); fill(d2,d2+n,-1e9); b(0,d1);b(n-1,d2); int ans=-1e9; rep(i,n){ ans=max(ans,d1[i]+d2[i]); } if(ans<0)cout<<-1<