#include using namespace std; using llong = long long; using ldbl = long double; using lpair = pair; #define ALL(x) x.begin(), x.end() constexpr llong mod = 1e9+7; constexpr llong inf = mod * mod; struct AB { llong A; llong B; const bool operator<(const AB &ri) const { return min(A, B) < min(ri.A, ri.B); } }; int main() { llong N, M; vector ab; set ippan, buin; cin >> N >> M; ab.resize(N); for (auto &[A, B]: ab) { cin >> A; } for (auto &[A, B]: ab) { cin >> B; } for (int i = 0; i < M; i++) { llong T, C; cin >> T >> C; if (T == 0) { ippan.insert(C); } else { buin.insert(C); } } sort(ALL(ab)); int cnt = 0; for (auto [a, b]: ab) { auto it1 = ippan.lower_bound(a); auto it2 = buin.lower_bound(b); if (it1 == ippan.end() && it2 == buin.end()) { continue; } else if (it2 == buin.end()) { cnt++; ippan.erase(it1); } else if (it1 == ippan.end()) { cnt++; buin.erase(it2); } else if (*it1 < *it2) { cnt++; ippan.erase(it1); } else { cnt++; buin.erase(it2); } } cout << N - cnt << endl; return 0; }