#include<bits/stdc++.h>

using namespace std;

namespace variables{
    typedef long double ld;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef unsigned int uint;
    typedef pair<ll,ll> pll;
    struct triple{
        ll first,second,third;
    };
}

using namespace variables;
void testt();
namespace andu2006{
    /// debugging
    void debug(set<ll> _var,string _name=""){
        cerr<<"Debug #set "<< _name<<" = [";
        for(auto it : _var)
            cerr<<it<<",";
        cerr<<"END] : "<<"size = "<<_var.size()<<"\n\n";
    }
    void light_debug(set<ll> _var,string _name=""){
        cerr<<"Debug #set "<< _name<<" = [";
        for(auto it : _var)
            cerr<<it<<",";
        cerr<<"END]\n\n";
    }
    void debug(map<ll,ll> _var,string _name=""){
        cerr<<"Debug #map (size = "<<_var.size()<<")\n";
        for(auto it : _var)
            cerr<<_name<<"["<<it.first<<"] = "<<it.second<<'\n';
    }
    void light_debug(map<ll,ll> _var,string _name=""){
        cerr<<"Debug #map \n";
        for(auto it : _var)
            cerr<<_name<<"["<<it.first<<"] = "<<it.second<<'\n';
    }
    void debug(deque<ll> _var,string _name=""){
        cerr<<"Debug #deque "<< _name<<" = [";
        for(auto it : _var)
            cerr<<it<<",";
        cerr<<"END] : "<<"size = "<<_var.size()<<"\n\n";
    }
    void light_debug(deque<ll> _var,string _name=""){
        cerr<<"Debug #deque "<< _name<<" = [";
        for(auto it : _var)
            cerr<<it<<",";
        cerr<<"END]\n\n";
    }
    void debug(vector<ll> _var,string _name=""){
        cerr<<"Debug #vector "<< _name<<" = [";
        for(auto it : _var)
            cerr<<it<<",";
        cerr<<"END] : "<<"size = "<<_var.size()<<"\n\n";
    }
    void light_debug(vector<ll> _var,string _name=""){
        cerr<<"Debug #vector "<< _name<<" = [";
        for(auto it : _var)
            cerr<<it<<",";
        cerr<<"END]\n\n";
    }
    void debug(string _var,string _name=""){
        cerr<<"Debug #string "<< _name<<" = ";
        cerr<<'"'<<_var<<'"';
        cerr<<" : "<<"size = "<<_var.size()<<"\n\n";
    }
    void light_debug(string _var,string _name=""){
        cerr<<"Debug #string : "<<_name<<" = "<<'"'<<_var<<'"'<<"\n\n";
    }
    void debug(ll _var,string _name=""){
        cerr<<"Debug #int64 : "<<_name<<" = "<<_var<<"\n\n";
    }
    void debug(ull _var,string _name=""){
        cerr<<"Debug #uint64 : "<<_name<<" = "<<_var<<"\n\n";
    }
    void debug(uint _var,string _name=""){
        cerr<<"Debug #uint32 : "<<_name<<" = "<<_var<<"\n\n";
    }
    void debug(int _var,string _name=""){
        cerr<<"Debug #int32 : "<<_name<<" = "<<_var<<"\n\n";
    }
    void debug(char _var,string _name=""){
        cerr<<"Debug #char : "<<_name<<" = '"<<_var<<"'\n\n";
    }
    void debug(bool _var,string _name=""){
        cerr<<"Debug #Boolean : "<<_name<<" = "<<(_var ? "1 True" : "0 False")<<"\n\n";
    }
    /// misc
    string emptyString;
    vector<ll> emptyVector;
    stack<ll> emptyStack;
    queue<ll> emptyQueue;
    void multipleTests(){
        ll __test_count;
        cin>>__test_count;
        while(__test_count--)
            testt();
    }
    void done(){
        exit(0);
    }
    void fastIO(){
        ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    }
    void rseed(){
        srand(time(NULL));
    }
    void mreset(void* _pointer, uint _size){
        memset(_pointer, 0, _size);
    }
    /// compare functions
    template<char compArg>
    bool compare(ll a,ll b){
        if(compArg == '<') return a < b;
        else if(compArg=='>') return a > b;
        return false;
    }
    template<char compArg1,char compArg2>
    bool compair(pll a, pll b){ /// HAHA pun
        return compare<compArg1>(a.first, b.first) || (a.first == b.first && compare<compArg2>(a.second, b.second));
    }
    template<char compArg1,char compArg2>
    struct objcompair{
        bool operator () (pll a, pll b){
            return compare<compArg1>(a.first, b.first) || (a.first == b.first && compare<compArg2>(a.second, b.second));
        }
    };
    /// binary functions
    ll trailingZeroes(ll x){
        if(x==0)
            return 0;
        return (x&1 ? 0 : 1 + trailingZeroes(x/2));
    }
    ll trailingOnes(ll x){
        if(x==0)
            return 0;
        return (x&1 ? 1 + trailingZeroes(x/2) : 0);
    }
    ll trailingPowerOfTwo(ll x){
        return 1ll<<trailingZeroes(x);
    }
    ll popCount(ll x){
        if(x == 0)
            return x;
        return 1 + popCount(x & -x);
    }
    ll log2(ll x){
        if(x==0) return -1;
        return 1+log2(x/2);
    }
    ll getBit(ll x,ll pos){
        return (x>>pos)&1;
    }
    ll cutLastOne(ll x){
        return x & -x;
    }
    /// modular functions; "mod" MUST BE PRIME
    ll binPow(ll _num, ll _exponent, ll _mod){ /// a^b
        if(_exponent == 0)
            return 1;
        ll _half = binPow(_num, _exponent/2, _mod);

        return _half * _half % _mod * (_exponent & 1 ? _num : 1) % _mod;
    }
    ll modularInverse(ll _x, ll _mod){ /// (a / b ) % mod
        return binPow(_x, _mod - 2, _mod);
    }
    ll comb(ll _n, ll _k, ll _mod){  /// binom(a, b)
        ll _ans=1;

        for(ll i = _n - _k + 1; i <= _n; i++)
            _ans = _ans * i % _mod;

        for(ll i = 2; i <= _k; i++)
            _ans = _ans * modularInverse(i, _mod) % _mod;
        return _ans;
    }
    /// math
    const ld PI = acos(-1);
    const ld rad = 180 / PI;
    ld degsin(ll __alpha){
        return sin(__alpha / rad);
    }
    ld degcos(ll __alpha){
        return cos(__alpha / rad);
    }
    ld degtan(ll __alpha){
        return tan(__alpha / rad);
    }
    ld degasin(ll _sine){
        return asin(_sine) * rad;
    }
    ld degacos(ll _cosine){
        return acos(_cosine) * rad;
    }
    ld degatan(ll _tangent){
        return atan(_tangent) * rad;
    }
    ll gcd(ll _num1,ll _num2){
        if(_num2 == 0)
            return _num1;
        return gcd(_num2,_num1%_num2);
    }
    ll lcm(ll _num1,ll _num2){
        return _num1*_num2/gcd(_num1,_num2);
    }
    ll divisors(ll _num){ /// number of divisors

        if(_num == 0) return 0;

        ll _cnt = 1, _exp;

        while(_num % 2==0){
            _cnt++;
            _num/=2;
        }
        for(ll _divisor = 3; _divisor * _divisor <= _num; _divisor += 2){
            _exp=0;
            while(_num % _divisor==0){
                _exp++;
                _num/=_divisor;
            }
            _cnt *= (_exp + 1);
        }
        if(_num>1) _cnt *= 2;
        return _cnt;
    }
    ll eulerTotient(ll _num){ /// computes the euler totient function
        if(_num == 0) return 0;

        ll _cnt = 1, _divisor=2;

        while(_num % _divisor == 0){
            _cnt *= _divisor;
            _num /= _divisor;
        }
        _cnt /= _divisor;
        _cnt *= (_divisor-1);
        for(ll _divisor = 3; _divisor * _divisor <= _num; _divisor += 2){
            if(_num % _divisor ==0){
                while(_num % _divisor == 0){
                    _cnt *= _divisor;
                    _num /= _divisor;
                }
                _cnt /= _divisor;
                _cnt *= (_divisor - 1);
            }
        }
        if(_num>1) _cnt *= _num-1;
        return _cnt;
    }
    void sieve(bool* _startpos, bool* _endpos){
         /// erathostenes' sieve; 0 means the number is prime; 1 means the number is composite
        ll _maxnum = _endpos - _startpos;
        for(ll i = 4; i < _maxnum; i += 2)
            *(_startpos+i)=1;
        for(ll i = 3; i * i < _maxnum; i+=2)
            if( *(_startpos + i) == 0)
                for(ll j = i * i; j < _maxnum; j+=i)
                    *(_startpos + j) = 1;
    }
}
/// - end of namespaces and start of program


#define MOD 998244353
#define NMAX 200001

void testt(){

}
ll height[NMAX];
vector<int> edg[NMAX];
int main()
{
    andu2006::fastIO();
    ll n,m,cnt=0;
    cin>>n>>m;
    for(ll i=1;i<=n;i++)
        cin>>height[i];
    for(ll i=0;i<m;i++){
        ll a,b;
        cin>>a>>b;
        edg[a].push_back(b);
        edg[b].push_back(a);
    }
    for(ll i=1;i<=n;i++){
        for(auto it : edg[i]){
            if(height[it]>=height[i]){
                cnt++;
                break;
            }
        }
    }
    cout<<n-cnt;
    andu2006::done();
}


Measured memory_bytes: 11900