#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>

#define mod 1000000007
#define limit 200001
typedef long long ll;
typedef long double ld;
#define rep(i,n) for(i = 0; i < n; i++)
#define max(a,b) ((a)>(b) ? (a) : (b))
#define min(a,b) ((a)<(b) ? (a) : (b))
int up_int(const void *a, const void *b){return *(int*)a - *(int*)b;}
int down_int(const void *a, const void *b){return *(int*)b - *(int*)a;}
int up_char(const void *left, const void *right) {return strcmp((char *)left,(char *)right);}

int main(){
    int n,m,i,j,count=0;
    int h[100001];
    int a[100001];
    int b[100001];
    int flag[100001] = {0};
    
    scanf("%d %d",&n,&m);
    for(i = 1; i <= n; i++) scanf("%d",&h[i]);
    for(i = 1; i <= m; i++) scanf("%d %d",&a[i],&b[i]);
    
    for(i = 1; i <= m; i++){
        if(h[a[i]] > h[b[i]]){
            flag[b[i]]--;
//            printf("%d is bad\n",b[i]);
        }else if(h[a[i]] == h[b[i]]){
            flag[a[i]]--;
            flag[b[i]]--;
//            printf("%d and %d are bad\n",a[i],b[i]);
        }else{
            flag[a[i]]--;
//            printf("%d is bad\n",a[i]);
        }
    }
    for(i = 1; i <= n; i++){
        if(flag[i] == 0){
            count++;
//            printf("%d is good tower!\n",i);
        }
    }
//    for(i = 1; i <= n; i++) printf("%d ",flag[i]);
    printf("%d\n",count);
    return 0;
}
