#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;   }   