#include <fstream>
#include <vector>
#include <set>
#include <algorithm>
#define DIM 810
using namespace std;
ifstream fin("poligon.in");
ofstream fout("poligon.out");
vector<pair<int, int> > V;
vector<pair< pair<int, int>, pair<int, int> > >M, P[DIM];
set<int> S;
set<int>::iterator its;
vector<int> X;
int n, m, x, y, xa, ya, x0, y0, i, j, ok, p, u, sol, mid, k, s;
inline int modul(int a) {
return ( a>0 ? a: -a );
}
int cmp(const pair< pair<int, int>, pair<int, int> > &a, const pair< pair<int, int>, pair<int, int> > &b) {
return a.first.second+a.second.second < b.first.second+b.second.second;
}
int semn(const pair<int, int> &a, const pair<int, int> &b, const pair<int, int> &c) {
return (b.first-a.first)*(c.second-a.second) - (c.first-a.first)*(b.second-a.second);
}
int main() {
fin>>n>>m;
fin>>xa>>ya;
x0 = xa;y0 = ya;
S.insert(x0);
for (i=2;i<=n;i++) {
fin>>x>>y;
S.insert(x);
if ((xa < x) || ((xa == x) && (ya < y)))
M.push_back(make_pair( make_pair(xa, ya) , make_pair(x, y) ));
else
M.push_back(make_pair( make_pair(x, y) , make_pair(xa, ya) ));
xa = x;
ya = y;
}
if ((xa <= x0)|| ((xa == x0) && (ya < y0)))
M.push_back(make_pair( make_pair(xa, ya) , make_pair(x0, y0) ));
else
M.push_back(make_pair( make_pair(x0, y0) , make_pair(xa, ya) ));
for (its = S.begin(); its!=S.end(); its++) {
X.push_back(*its);
}
for (i=0;i<X.size()-1;i++) {
for (j=0;j<M.size();j++) {
if (M[j].first.first <= X[i] && M[j].second.first >=X[i+1]) {
P[i].push_back(M[j]);
}
}
}
for (i=0;i<X.size()-1;i++)
sort(P[i].begin(), P[i].end(), cmp);
for (i=1;i<=m;i++) {
fin>>x>>y;
// caut fasia in care se gaseste punctul
if (x < X[0] || x > X[X.size()-1]) {
continue;
}
p = 0;
u = X.size()-1;
while (p <= u) {
mid = (p+u)/2;
if (x >= X[mid] && x<=X[mid+1]) {
break;
}
if (x < X[mid])
u = mid-1;
else
p = mid+1;
}
//caut in fasia X[mid], X[mid+1]
pair<int, int>t = make_pair(x,y);
if(semn(P[mid][0].first, P[mid][0].second, t) < 0)
continue;
if (semn( P[mid][ P[mid].size()-1 ].first, P[mid][ P[mid].size()-1 ].second, t ) > 0)
continue;
ok = 0;
p = 1;
u = P[mid].size()-1;
while (p<=u) {
k = (p+u)/2;
s = semn(P[mid][k].first, P[mid][k].second, t);
if (s == 0 && t.second >= P[mid][k].first.second && t.second<=P[mid][k].second.second) {
sol++;
ok = 1;
}
if (s > 0)
p = k+1;
else
u = k-1;
}
if (ok)
continue;
if (u%2 == 0)
sol++;
}
fout<<sol<<"\n";
return 0;
}