#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nn "\n"
#define pi pair<int, int>
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define eb emplace_back
#define pb push_back
#define TASK "DGDIEM"
#define ms(a, x) memset(a, x, sizeof(a))
#define all(a) a.begin(), a.end()
#define All(a, n) a + 1, a + 1 + n
#define LOG 19
const int INF = 1e18;
const int mod = 1e9;
const int N = 1e5 + 5;
const int MOD = 998244353;
struct Point{
int x, y;
};
int n, m;
Point a[15];
int cross(Point u, Point v, Point w){
return (v.x - u.x) * (w.y - u.y) - (v.y - u.y) * (w.x - u.x);
}
bool trenDoan(Point u, Point v, Point w){
return cross(u, v, w) == 0
&& min(u.x, v.x) <= w.x
&& w.x <= max(u.x, v.x)
&& min(u.y, v.y) <= w.y
&& w.y <= max(u.y, v.y);
}
bool trongDaGiac(Point p){
bool duong = false, am = false;
for(int i = 1; i <= n; i++){
int j = i % n + 1;
int val = cross(a[i], a[j], p);
if(val == 0 && trenDoan(a[i], a[j], p))
return true;
if(val > 0) duong = true;
if(val < 0) am = true;
}
return !(duong && am);
}
void nhap(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> a[i].x >> a[i].y;
}
}
void solve(){
int ans = 0;
for(int i = 1; i <= m; i++){
Point p;
cin >> p.x >> p.y;
if(trongDaGiac(p)) ans++;
}
cout << ans << nn;
}
signed main(){
if(fopen(TASK".INP", "r")){
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
nhap();
solve();
return (0 ^ 0);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgbm4gIlxuIgojZGVmaW5lIHBpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgZWIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgVEFTSyAiREdESUVNIgoKI2RlZmluZSBtcyhhLCB4KSBtZW1zZXQoYSwgeCwgc2l6ZW9mKGEpKQojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksIGEuZW5kKCkKI2RlZmluZSBBbGwoYSwgbikgYSArIDEsIGEgKyAxICsgbgoKI2RlZmluZSBMT0cgMTkKCmNvbnN0IGludCBJTkYgPSAxZTE4Owpjb25zdCBpbnQgbW9kID0gMWU5Owpjb25zdCBpbnQgTiA9IDFlNSArIDU7CmNvbnN0IGludCBNT0QgPSA5OTgyNDQzNTM7CgpzdHJ1Y3QgUG9pbnR7CiAgICBpbnQgeCwgeTsKfTsKCmludCBuLCBtOwpQb2ludCBhWzE1XTsKaW50IGNyb3NzKFBvaW50IHUsIFBvaW50IHYsIFBvaW50IHcpewogICAgcmV0dXJuICh2LnggLSB1LngpICogKHcueSAtIHUueSkgLSAodi55IC0gdS55KSAqICh3LnggLSB1LngpOwp9CmJvb2wgdHJlbkRvYW4oUG9pbnQgdSwgUG9pbnQgdiwgUG9pbnQgdyl7CiAgICByZXR1cm4gY3Jvc3ModSwgdiwgdykgPT0gMAogICAgICAgICYmIG1pbih1LngsIHYueCkgPD0gdy54CiAgICAgICAgJiYgdy54IDw9IG1heCh1LngsIHYueCkKICAgICAgICAmJiBtaW4odS55LCB2LnkpIDw9IHcueQogICAgICAgICYmIHcueSA8PSBtYXgodS55LCB2LnkpOwp9CmJvb2wgdHJvbmdEYUdpYWMoUG9pbnQgcCl7CiAgICBib29sIGR1b25nID0gZmFsc2UsIGFtID0gZmFsc2U7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgaW50IGogPSBpICUgbiArIDE7CiAgICAgICAgaW50IHZhbCA9IGNyb3NzKGFbaV0sIGFbal0sIHApOwogICAgICAgIGlmKHZhbCA9PSAwICYmIHRyZW5Eb2FuKGFbaV0sIGFbal0sIHApKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZih2YWwgPiAwKSBkdW9uZyA9IHRydWU7CiAgICAgICAgaWYodmFsIDwgMCkgYW0gPSB0cnVlOwogICAgfQogICAgcmV0dXJuICEoZHVvbmcgJiYgYW0pOwp9CnZvaWQgbmhhcCgpewogICAgY2luID4+IG4gPj4gbTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBjaW4gPj4gYVtpXS54ID4+IGFbaV0ueTsKICAgIH0KfQp2b2lkIHNvbHZlKCl7CiAgICBpbnQgYW5zID0gMDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKXsKICAgICAgICBQb2ludCBwOwogICAgICAgIGNpbiA+PiBwLnggPj4gcC55OwogICAgICAgIGlmKHRyb25nRGFHaWFjKHApKSBhbnMrKzsKICAgIH0KICAgIGNvdXQgPDwgYW5zIDw8IG5uOwp9CnNpZ25lZCBtYWluKCl7CiAgICBpZihmb3BlbihUQVNLIi5JTlAiLCAiciIpKXsKICAgICAgICBmcmVvcGVuKFRBU0siLklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oVEFTSyIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIG5oYXAoKTsKICAgIHNvbHZlKCk7CiAgICByZXR1cm4gKDAgXiAwKTsKfQ==