#include <iostream>#include <sstream>#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <ctime>#include <algorithm>#include <vector>#include <queue>#include <deque>#include <stack>#include <set>#include <map>#include <complex>#include <bitset>#include <iomanip>#include <utility>using namespace std;typedef long long LL;typedef complex<double> point;typedef long double ldb;typedef pair<int,int> pii;const int MAXN = 100000+10;int n,m;int lo[MAXN],hi[MAXN],w[MAXN];vector <int> add[MAXN],del[MAXN];struct cmp{inline bool operator () (const int &A, const int &B){return (hi[A]!=hi[B]) ? (hi[A]<hi[B]) : (A<B);}};void main2(){for (int i=0; i<n; i++)cin >> lo[i] >> hi[i];for (int i=0; i<m; i++)cin >> w[i];sort(w,w+m);for (int i=0; i<=m; i++)add[i].clear(), del[i].clear();for (int i=0; i<n; i++){lo[i] = lower_bound(w, w+m, lo[i]) - w;hi[i] = upper_bound(w, w+m, hi[i]) - w;if (lo[i] < hi[i]){add[lo[i]].push_back(i);del[hi[i]].push_back(i);}}set <int, cmp> SET;int ret = 0;for (int i=0; i<m; i++){for (int j=0; j<(int)del[i].size(); j++)SET.erase (del[i][j]);for (int j=0; j<(int)add[i].size(); j++)SET.insert(add[i][j]);if (!SET.empty()){ret++;SET.erase(SET.begin());}}cout << ret << endl;}int main(){while (cin >> n >> m){main2();}}


