import sys input = sys.stdin.readline from collections import deque N,M=map(int,input().split()) H=list(map(int,input().split())) XY=[list(map(lambda x:int(x)-1,input().split())) for _ in range(M)] edge1 = [[] for _ in range(N)] edge2 = [[] for _ in range(N)] ins1 = [0]*N ins2 = [0]*N for x,y in XY: edge1[x].append((y,max(0, H[y]-H[x]))) ins1[y]+=1 edge2[y].append((x,max(0, H[x]-H[y]))) ins2[x]+=1 INF=10**60 def solve(edge, ins, start, goal): dp = [-INF]*N dp2 = [-INF]*N dp[start]=0 que = deque() for i,j in enumerate(ins): if j==0: que.append(i) while que: cur = que.popleft() u = dp[cur] u2 = dp2[cur] for to,h in edge[cur]: if h>0: dp2[to] = max(dp2[to], u + h) else: dp[to] = max(dp[to], u2, u) ins[to]-=1 if ins[to]==0: que.append(to) ans = max(dp[goal], dp2[goal]) if ans<0: print(-1) else: print(ans) # print(dp) # print(dp2) solve(edge1,ins1, 0, -1) solve(edge2,ins2, -1, 0)