#include <bits/stdc++.h>
#define kien long long
#define int long long
#define FOR(i, a, b) for (int i = a;i <= b; i++)
#define FORD(i, a, b) for (int i = a;i >= b; i--)
#define task "a"
#define fin(x) freopen(x".inp","r",stdin)
#define fou(x) freopen(x".out","w",stdout)
#define pii pair <int, int>
using namespace std;
const int mxn = 1e5 + 5;
kien n, m, c[mxn], ans;
pii a[mxn];
bool cmp (pii x, pii y) {
return x.second < y.second;
}
main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
if (fopen(task".inp", "r")) {
fin(task); fou(task);
}
cin >> n >> m;
// vector <int> zip;
FOR (i, 1, n) {
cin >> a[i].first >> a[i].second;
// zip.pb(a[i].first); zip.pb(a[i].second);
}
FOR (i, 1, m) cin >> c[i];// zip.pb(c[i]);
// sort (zip.begin(), zip.end());
// zip.erase(unique(zip.begin(), zip.end()), zip.end());
// FOR (i, 1, n) {
// a[i].first = lower_bound(zip.begin(), zip.end(), a[i].first) - zip.begin() + 1;
// a[i].second = lower_bound(zip.begin(), zip.end(), a[i].second) - zip.begin() + 1;
// vec[a[i].first].pb(a[i].second);
// }
// FOR (i, 1, m) c[i] = lower_bound(zip.begin(), zip.end(), c[i]) - zip.begin() + 1; pp[c[i]]++;
//
sort (c + 1, c + 1 + m);
sort (a + 1, a + 1 + n, cmp);
for (int i = m, j = n; i >= 1; i--) {
while (c[i] < a[j].first and j >= 1) {
j--;
}
if (c[i] >= a[j].first and j >= 1)
ans++, j--;
}
cout << ans;
}