#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
struct xy {
int s, e;
}a[121212];
bool sort_s(xy a, xy b) {
if (a.s != b.s)return a.s < b.s;
return a.e < b.e;
}
int C[121212];
priority_queue<int>Q;
int main() {
int n, m;
int i, j;
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++)scanf("%d", &C[i]);
for (i = 0; i < m; i++)scanf("%d%d", &a[i].s, &a[i].e);
sort(C, C + n);
sort(a, a + m, sort_s);
int now = 0, ans = 0;
for (i = 0; i < n; i++) {
while (now < m&&a[now].s <= C[i])Q.push(-a[now++].e);
while (!Q.empty() && -Q.top() < C[i])Q.pop();
if (!Q.empty())ans++, Q.pop();
}
printf("%d", ans);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IHh5IHsKCWludCBzLCBlOwp9YVsxMjEyMTJdOwpib29sIHNvcnRfcyh4eSBhLCB4eSBiKSB7CglpZiAoYS5zICE9IGIucylyZXR1cm4gYS5zIDwgYi5zOwoJcmV0dXJuIGEuZSA8IGIuZTsKfQppbnQgQ1sxMjEyMTJdOwpwcmlvcml0eV9xdWV1ZTxpbnQ+UTsKaW50IG1haW4oKSB7CglpbnQgbiwgbTsKCWludCBpLCBqOwoJc2NhbmYoIiVkJWQiLCAmbiwgJm0pOwoJZm9yIChpID0gMDsgaSA8IG47IGkrKylzY2FuZigiJWQiLCAmQ1tpXSk7Cglmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKXNjYW5mKCIlZCVkIiwgJmFbaV0ucywgJmFbaV0uZSk7Cglzb3J0KEMsIEMgKyBuKTsKCXNvcnQoYSwgYSArIG0sIHNvcnRfcyk7CglpbnQgbm93ID0gMCwgYW5zID0gMDsKCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKCQl3aGlsZSAobm93IDwgbSYmYVtub3ddLnMgPD0gQ1tpXSlRLnB1c2goLWFbbm93KytdLmUpOwoJCXdoaWxlICghUS5lbXB0eSgpICYmIC1RLnRvcCgpIDwgQ1tpXSlRLnBvcCgpOwoJCWlmICghUS5lbXB0eSgpKWFucysrLCBRLnBvcCgpOwoJfQoJcHJpbnRmKCIlZCIsIGFucyk7CglyZXR1cm4gMDsKfQ==