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

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

AB=[set() for i in range(N)]

#例2を見ると、同じ展望台を結ぶ複数の道がある

for i in range(M):

  A,B=list(map(int,input().split()))

  A-=1

  B-=1

  AB[A].add(B)

  AB[B].add(A)

ans=0

for i in range(N):

  res=True

  for x in AB[i]:

    if H[i]<=H[x]:#同じ高さの展望台は条件を満たさない

      res=False

      break

  if res:

    ans+=1#チェックした結果、OKの展望台だけ、答に加える

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

L=[[] for i in range(N)]

#一次配列なら[]*NもOKだが、二次配列だと内包表記

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

for i in range(M):

  A,B=list(map(int,input().split()))

  A-=1

  B-=1

  L[A].append(B)

  L[B].append(A)

ans=0

for i in range(N):

  flag=True

  #フラグは各展望台毎のチェックに使う

  for j in L[i]:

  #for文はrangeで使わず、配列から一つ一つ取り出す

    if H[i]<=H[j]:

      flag=False#条件に合わなかったらフラグを変える

      break

  if flag:#条件に合う展望台数をフラグで数える

    ans+=1

print(ans)
N, M = list(map(int, input().split()))
H = list(map(int, input().split()))
AB = [set() for i in range(N)]
# 例2を見ると、同じ展望台を結ぶ複数の道がある
for i in range(M):
    A, B = list(map(int, input().split()))
    A -= 1
    B -= 1
    AB[A].add(B)
    AB[B].add(A)
ans = 0
for i in range(N):
    res = True
    for x in AB[i]:
        if H[i] <= H[x]:  # 同じ高さの展望台は条件を満たさない
            res = False
            break
    if res:
        ans += 1  # チェックした結果、OKの展望台だけ、答に加える
print(ans)

N, M = list(map(int, input().split()))
L = [[] for i in range(N)]
# 一次配列なら[]*NもOKだが、二次配列だと内包表記
H = list(map(int, input().split()))
for i in range(M):
    A, B = list(map(int, input().split()))
    A -= 1
    B -= 1
    L[A].append(B)
    L[B].append(A)
ans = 0
for i in range(N):
    flag = True
    # フラグは各展望台毎のチェックに使う
    for j in L[i]:
        # for文はrangeで使わず、配列から一つ一つ取り出す
        if H[i] <= H[j]:
            flag = False  # 条件に合わなかったらフラグを変える
            break
    if flag:  # 条件に合う展望台数をフラグで数える
        ans += 1
print(ans)

+L = [[] for i in range(N)] +# 一次配列なら[]*NもOKだが、二次配列だと内包表記 -AB = [set() for i in range(N)] -# 例2を見ると、同じ展望台を結ぶ複数の道がある -    AB[A].add(B) -    AB[B].add(A) +    L[A].append(B) +    L[B].append(A) -    res = True -    for x in AB[i]: -        if H[i] <= H[x]:  # 同じ高さの展望台は条件を満たさない -            res = False +    flag = True +    # フラグは各展望台毎のチェックに使う +    for j in L[i]: +        # for文はrangeで使わず、配列から一つ一つ取り出す +        if H[i] <= H[j]: +            flag = False  # 条件に合わなかったらフラグを変える -    if res: -        ans += 1  # チェックした結果、OKの展望台だけ、答に加える +    if flag:  # 条件に合う展望台数をフラグで数える +        ans += 1