#include <bits/stdc++.h>
using namespace std;
bool gt(long double a, long double b) { return a > b + 1e-12; }
int n, m;
vector<pair<bool, pair<int, int> > > pt, org;
pair<int, int> o;
inline bool left_turn(const pair<int, int> &a, const pair<int, int> &b,
                      const pair<int, int> &c) {
  return 1LL * (b.first - a.first) * (c.second - b.second) -
             1LL * (b.second - a.second) * (c.first - b.first) >
         0;
}
inline bool cmp(pair<bool, pair<int, int> > a, pair<bool, pair<int, int> > b) {
  return left_turn(o, a.second, b.second);
}
inline bool by_Y(pair<bool, pair<int, int> > a, pair<bool, pair<int, int> > b) {
  return a.second.second < b.second.second;
}
int main() {
  ios::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  org.resize(n + m);
  for (register int i = (0); i < (int)(n); ++i)
    cin >> org[i].second.first >> org[i].second.second, org[i].first = 0;
  for (register int i = (0); i < (int)(m); ++i)
    cin >> org[i + n].second.first >> org[i + n].second.second,
        org[i + n].first = 1;
  int tot = 0;
  sort((org).begin(), (org).end(), by_Y);
  for (register int rep = (0); rep < (int)(((int)(org).size())); ++rep)
    if (org[rep].first == 0) {
      pt.clear();
      for (register int i = (0); i < (int)(((int)(org).size())); ++i)
        if (org[rep].second <= org[i].second && i != rep) pt.push_back(org[i]);
      o = org[rep].second;
      sort((pt).begin(), (pt).end(), cmp);
      for (register int oth = (0); oth < (int)(((int)(pt).size())); ++oth)
        if (pt[oth].first == 0) {
          pair<int, int> worst;
          bool wfound = false;
          for (register int i = (1); i < (int)(((int)(pt).size())); ++i) {
            pair<bool, pair<int, int> > next =
                pt[(oth + i) % ((int)(pt).size())];
            if (!left_turn(o, pt[oth].second, next.second)) break;
            if (next.first == 1 &&
                (wfound == false ||
                 left_turn(pt[oth].second, worst, next.second)))
              worst = next.second, wfound = true;
            if (next.first == 0 &&
                (wfound == false ||
                 left_turn(pt[oth].second, worst, next.second)))
              tot++;
          }
        }
    }
  cout << tot << endl;
  return 0;
}
