#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
priority_queue<int,vector<int>,greater<int>> v[N];
int c[N];
int n,m;
int ans;
multiset<int> s;
int main(){
scanf("%d%d",&n,&m);
c[n+1]=INT_MAX;
for(int i=1;i<=n;i++) scanf("%d",&c[i]);
for(int i=1;i<=m;i++){
int x, y;
scanf("%d%d",&x,&y);
v[x].push(y+1);
}
for(int i=1;i<=n+1;i++){
while(!s.empty() && *s.begin()==i){
s.erase(s.begin());
ans++;
}
if(i==n+1) break;
if(s.size()>c[i]){
multiset<int>::iterator it=s.end();
it--;
while(s.size()>c[i]){
multiset<int>::iterator k=it;
s.erase(k);
it--;
}
}
while(!v[i].empty()){
int tmp=v[i].top();
v[i].pop();
if(s.size()<c[i]){
s.insert(tmp);
}
else{
multiset<int>::iterator it=s.end();
it--;
if(*it>tmp){
s.erase(it);
s.insert(tmp);
}
else break;
}
}
}
printf("%d\n",ans);
return 0;
}