#include <bits/stdc++.h>
using namespace std;
int k, n, x[10000], y[10000], z[10000], ans, xx[10000], yy[10000], r,
    la[10][10000], d[10000];
bool flag[10000], ff[10000];
struct lsg {
  int x, y;
} a[10000], b[10000];
int gcd(int x, int y) { return y == 0 ? x : gcd(y, x % y); }
bool dfs(int l) {
  if (l > r) return true;
  int rr = r;
  for (int i = 1; i <= k; i++)
    if (!flag[i]) {
      while (r > rr) ff[d[r--]] = false;
      for (int j = la[i][d[l]]; j; j = la[i][j])
        if (!ff[j]) d[++r] = j, ff[j] = true;
      if (r > k) continue;
      flag[i] = true;
      if (dfs(l + 1)) return true;
      flag[i] = false;
    }
  return false;
}
signed main() {
  ios::sync_with_stdio(false);
  cin >> k >> n;
  for (int i = 1; i <= k; i++) cin >> b[i].x >> b[i].y;
  for (int i = 1; i <= n; i++) cin >> a[i].x >> a[i].y;
  for (int l = 1; l <= k; l++) {
    for (int i = 1; i <= n; i++)
      x[i] = a[i].x - b[l].x, y[i] = a[i].y - b[l].y,
      z[i] = gcd(abs(x[i]), abs(y[i])), xx[i] = x[i] / z[i],
      yy[i] = y[i] / z[i];
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++)
        if (xx[i] == xx[j] && yy[i] == yy[j]) {
          if (i == j) continue;
          if (z[i] > z[j]) {
            if (!la[l][i] || z[la[l][i]] < z[j]) la[l][i] = j;
          } else if (!la[l][j] || z[la[l][j]] < z[i])
            la[l][j] = i;
        }
  }
  for (int i = 1; i <= n; i++) {
    r = 1;
    d[1] = i;
    memset(flag, 0, sizeof(flag));
    memset(ff, 0, sizeof(ff));
    if (dfs(1)) ans++;
  }
  cout << ans << endl;
}
