{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE BinaryLiterals #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE NumDecimals #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}

import Control.Applicative
import Control.Arrow
import Control.Monad
import Control.Monad.ST

import Data.Char
import Data.List
import Data.Maybe

import qualified Data.ByteString.Char8 as B

import Data.Array.ST.Safe
import Data.STRef

import Debug.Trace
import Text.Printf

readInt = readLn :: IO Int
readInteger = readLn :: IO Integer
readInts = map ( fst . fromJust . B.readInt ) . B.words <$> B.getLine
readIntegers = map ( fst . fromJust . B.readInteger ) . B.words <$> B.getLine

which a b f = if f then a else b
mp [ a, b ] = ( a, b )

modifyArray a i f = writeArray a i =<< f <$> readArray a i

main = do
	[ n, m ] <- readInts
	hs <- readInts
	[ as, bs ] <- map ( map pred ) . transpose <$> replicateM m readInts
	print $ solve n as bs hs

solve n as bs hs' = runST $ do
	let
		m = length as
	hs <- newArray ( 0, n - 1 ) 0 :: ST s ( STUArray s Int Int )
	higher <- newArray ( 0, n - 1 ) 0 :: ST s ( STUArray s Int Int )
	forM_ ( zip [ 0 .. ] hs' ) $ \( i, h ) -> do
		writeArray hs i h
	forM_ ( zip as bs ) $ \( a, b ) -> do
		ha <- readArray hs a
		hb <- readArray hs b
		when ( ha <= hb ) $ do
			modifyArray higher a succ
		when ( ha >= hb ) $ do
			modifyArray higher b succ
	length . filter  ( == 0 ) <$> getElems higher