#include <bits/stdc++.h>
using namespace std;
int n, m;
struct Vec {
  long long x, y;
  Vec operator+(const Vec &o) const { return (Vec){x + o.x, y + o.y}; }
  Vec operator-(const Vec &o) const { return (Vec){x - o.x, y - o.y}; }
  long long operator*(const Vec &o) const {
    return 1ll * x * o.y - 1ll * y * o.x;
  }
  long long operator|(const Vec &o) const {
    return 1ll * x * o.x + 1ll * y * o.y;
  }
} mon[1010], arr[11];
vector<int> ir[11][1010];
bool book[11];
int a[11];
int die[1010], clk;
int now;
bool chk(int p) {
  if (die[p] == clk) return 1;
  now++;
  if (now > m) return 0;
  int ap = a[now];
  int ma = ir[ap][p].size();
  if (!ma) {
    die[p] = clk;
    return 1;
  }
  for (int i = 0; i < ma; ++i)
    if (!chk(ir[ap][p][i])) return 0;
  die[p] = clk;
  return 1;
}
bool check(int x) {
  clk++;
  now = 0;
  return chk(x);
}
bool dfs(int x, int p) {
  if (x > m) {
    if (check(p)) return 1;
    return 0;
  }
  for (int i = 1; i <= m; ++i)
    if (!book[i]) {
      a[x] = i;
      book[i] = 1;
      if (dfs(x + 1, p)) return 1;
      book[i] = 0;
    }
  return 0;
}
int main() {
  scanf("%d%d", &m, &n);
  for (int i = 1; i <= m; ++i) scanf("%lld%lld", &arr[i].x, &arr[i].y);
  for (int i = 1; i <= n; ++i) scanf("%lld%lld", &mon[i].x, &mon[i].y);
  Vec vn, v1;
  for (int i = 1; i <= m; ++i)
    for (int j = 1; j <= n; ++j) {
      vn = mon[j] - arr[i];
      for (int k = 1; k <= n; ++k) {
        if (k == j) continue;
        v1 = mon[k] - arr[i];
        if (v1 * vn != 0 || (v1 | vn) <= 0) continue;
        if (abs(v1.x) > abs(vn.x) || abs(v1.y) > abs(vn.y)) continue;
        ir[i][j].push_back(k);
      }
    }
  int ans = 0;
  for (int i = 1; i <= n; ++i) {
    memset(book, 0, sizeof(book));
    if (dfs(1, i)) ans++;
  }
  printf("%d\n", ans);
  return 0;
}
