import sys
from collections import deque
def solve():
input = sys.stdin.read().split()
ptr = 0
n, m = int(input[ptr]), int(input[ptr+1])
ptr += 2
A = list(map(int, input[ptr:ptr+n]))
ptr += n
adj = [[] for _ in range(n+1)]
in_degree = [0] * (n + 1)
for _ in range(m):
u, v = int(input[ptr]), int(input[ptr+1])
ptr += 2
adj[u].append(v)
in_degree[v] += 1
dp = [1] * (n + 1)
max_dp = [0] * 11
q = deque()
for i in range(1, n + 1):
if in_degree[i] == 0:
q.append(i)
top_order = []
while q:
u = q.popleft()
top_order.append(u)
for v in adj[u]:
in_degree[v] -= 1
if in_degree[v] == 0:
q.append(v)
for u in top_order:
current_a = A[u - 1]
max_prev = 0
for a in range(1, current_a + 1):
if max_dp[a] > max_prev:
max_prev = max_dp[a]
if max_prev + 1 > dp[u]:
dp[u] = max_prev + 1
if dp[u] > max_dp[current_a]:
max_dp[current_a] = dp[u]
print(max(dp))
solve()