#include <list>
#include <map>
#include <set>
#include <queue>
#include <string>
#include <deque>
#include <stack>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <limits.h>
#include <time.h>
#include <string.h>
using namespace std;
#define LL long long
#define PI acos(-1.0)
#define Max INT_MAX
#define Min INT_MIN
#define eps 1e-8
#define FRE freopen("a.txt","r",stdin)
#define N 1001
priority_queue<int , vector<int> ,greater<int> > p[701];
int s[51];
int n,m;
bool vis[51];
int live,die;
void gao(){
int i,j,k;
live=0,die=0;
int t=1;
while(live+die<m){
i=0;
while(i<n && !p[t].empty()){
int x=p[t].top();
p[t].pop();
if(x>=s[i]){
die++;
i++;
}
else
if(x-1>=s[0]){
x--;
p[t+1].push(x);
}
else
live++;
}
while(!p[t].empty()){
int x=p[t].top();
p[t].pop();
if(x-1>=s[0]){
x--;
p[t+1].push(x);
}
else
live++;
}
t++;
}
printf("%d\n",die);
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
int i,j;
for(i=0;i<n;i++)scanf("%d",&s[i]);
sort(s,s+n);
for(i=0;i<=700;i++)
while(!p[i].empty())
p[i].pop();
for(i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
p[a].push(b);
}
gao();
}
return 0;
}