#int(input())
#map(int, input().split())
#list(map(int, input().split()))

N, M = map(int, input().split())
H = list(map(int, input().split()))

toc = [[] for i in range(N)]
toz = [[] for i in range(N)]

for i in range(M):
    x, y = map(int, input().split())
    toc[x-1].append(y-1)
    toz[y-1].append(x-1)

dp1 = [-1] * N
dp2 = [-1] * N

dp1[0] = 0
dp2[0] = 0

for i in range(N-1):
    for x in toc[i]:
        if H[i] > H[x]:
            dp1[x] = max(dp1[i], dp2[i], dp1[x])
        else:
            if dp1[i] != -1:
                dp2[x] = max(dp2[x], dp1[i] + (H[x] - H[i]))

# print(dp1)
# print(dp2)

print(max(dp1[N-1], dp2[N-1]))

dp1 = [-1] * N
dp2 = [-1] * N

dp1[N-1] = 0
dp2[N-1] = 0

for i in range(N-1, 0, -1):
    for x in toz[i]:
        if H[i] > H[x]:
            dp1[x] = max(dp1[i], dp2[i], dp1[x])
        else:
            if dp1[i] != -1:
                dp2[x] = max(dp2[x], dp1[i] + (H[x] - H[i]))

# print(dp1)
# print(dp2)

print(max(dp1[0], dp2[0]))