#include <bits/stdc++.h>
using namespace std;
int N, M;
map<int, int> map1, map2;
map<pair<int, int>, int> map21, map22;
int main() {
  scanf("%d%d", &N, &M);
  map1.clear(), map2.clear();
  map21.clear(), map22.clear();
  while (N--) {
    int a, b;
    scanf("%d%d", &a, &b);
    pair<int, int> p = make_pair(a, b);
    if (map1.find(b) == map1.end())
      map1[b] = 1;
    else
      ++map1[b];
    if (map21.find(p) == map21.end())
      map21[p] = 1;
    else
      ++map21[p];
  }
  while (M--) {
    int a, b;
    scanf("%d%d", &a, &b);
    pair<int, int> p = make_pair(a, b);
    if (map2.find(b) == map2.end())
      map2[b] = 1;
    else
      ++map2[b];
    if (map22.find(p) == map22.end())
      map22[p] = 1;
    else
      ++map22[p];
  }
  int cnt1 = 0, cnt2 = 0;
  map<pair<int, int>, int>::iterator it;
  for (it = map21.begin(); it != map21.end(); ++it) {
    pair<int, int> p = it->first;
    if (map22.find(p) != map22.end())
      cnt2 += it->second < map22[p] ? it->second : map22[p];
  }
  map<int, int>::iterator it2;
  for (it2 = map1.begin(); it2 != map1.end(); ++it2) {
    int t = it2->first;
    if (map2.find(t) != map2.end())
      cnt1 += it2->second < map2[t] ? it2->second : map2[t];
  }
  printf("%d %d\n", cnt1, cnt2);
  return 0;
}
