#include <bits/stdc++.h>

#define debug(x) cout <<"DEBUG"<<" "<< #x << ":" << x << '\n'
#define rep(i,n) for(int_fast32_t i = 0; i < ((int_fast32_t)(n)); i++)   // 0-indexed昇順
#define rep1(i,n) for(int_fast32_t i = 1; i <= ((int_fast32_t)(n)); i++) // 1-indexed昇順
#define rrep(i,n) for(int_fast32_t i = ((int_fast32_t)(n)-1); i >= 0; i--)  // 0-indexed降順
#define rrep1(i,n) for(int_fast32_t i = ((int_fast32_t)(n)); i >= 1; i--)   // 1-indexed降順
#define all(x) (x).begin(),(x).end()

using namespace std;

template<typename T>
using vec = vector<T>;
using i32 = int_fast32_t;
using i64 = int_fast64_t;
using u32 = uint_fast32_t;
using u64 = uint_fast64_t;
using ll = long long;
using ld = long double;
using vi = vec<int_fast32_t>;
using vl = vec<int_fast64_t>;
using vld = vec<ld>;
using vii = vec<vi>;  // 2次元配列
using PII = pair<int_fast32_t, int_fast32_t>;

template<class T>
using maxheap = std::priority_queue<T>;
template<class T>
using minheap = std::priority_queue<T, std::vector<T>, std::greater<T>>;

template<class T,class U> inline bool chmax(T &a, const U &b){if(a<b){a=b;return 1;}return 0;}
template<class T,class U> inline bool chmin(T &a, const U &b){if(a>b){a=b;return 1;}return 0;}

const ld Pi = std::acos(-1.0L);
constexpr ll infll = (1LL<<62)-1;
constexpr int inf = (1<<30)-1;
const int mod = 1000000007;
// const int mod = 998244353;


/*FUNCs=================================================*/
bool cmp(PII a, PII b) {
    if(a.second < b.second) return true;
    else if(a.second == b.second) {
        if(a.first < b.first) return true;
    }
    return false;
}

bool smaller(PII a, PII b) {
    if(a.first < b.first && a.second < b.second) return true;
    return false;
}

/*MAIN==================================================*/
signed main(){
    int START_TIME = clock();
    cin.tie(nullptr);
    ios::sync_with_stdio(false);   //cin cout 高速化
//    cout << fixed << setprecision(15);

    i32 n; cin >> n;
    vec<PII> red(n), blue(n);
    rep(i,n) cin >> red[i].first >> red[i].second;
    rep(i,n) cin >> blue[i].first >> blue[i].second;
    sort(begin(blue), end(blue));

    using Iter = std::multiset<std::pair<long, long>, std::less<std::pair<long, long> >, std::allocator<std::pair<long, long> > >::iterator;
    multiset<PII> reds;
    for(auto p : red) reds.insert(p);
    auto siz = reds.size();
    for(auto bluePair : blue) {
//        cout << bluePair.first << ' ' << bluePair.second << ':' << ' ';  // debug
        PII tmp = *reds.begin();
        for(Iter iter = reds.begin(); iter != reds.end(); ++iter) if(smaller(*iter, bluePair)) {
            if(!smaller(tmp, bluePair)) tmp = *iter;
            if(cmp(tmp, *iter)) tmp = *iter;
//            cout << iter->first << ' ' << iter->second << "/";  // debug
//            cout << tmp.first << ' ' << tmp.second << "  ";  // debug
        }
//        cout << '\n';  // debug
        if(!smaller(tmp, bluePair)) continue;
        Iter del_iter = lower_bound(all(reds), tmp);
        Iter del_iter2 = ++lower_bound(all(reds), tmp);
        reds.erase(del_iter, del_iter2);
//        cout << del_iter->first << ' ' << del_iter->second << '\n';  // debug
    }
    auto cnt = siz-reds.size();

    cout << cnt << '\n';

    // printf("ExecutionTime: %d /ms\n",1000*(int)((clock()-START_TIME)/CLOCKS_PER_SEC));
}


Measured memory_bytes: 256