#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const long long di = 1005;
long long k, n, vis[4005][4005], anss[505];
long long sx[8] = {-2, -1, 1, 2, 2, 1, -1, -2},
          zy[8] = {1, 2, 2, 1, -1, -2, -2, -1};
struct node {
  long long x, y, bs;
};
void bfs(long long aa, long long bb) {
  node oo;
  oo.x = aa;
  oo.y = bb;
  oo.bs = 0;
  queue<node> q;
  q.push(oo);
  vis[aa + di][bb + di] = 1;
  while (!q.empty()) {
    node kk = q.front();
    q.pop();
    anss[kk.bs]++;
    if (kk.bs == k) continue;
    for (long long i = 0; i < 8; ++i) {
      long long xx = kk.x + sx[i], yy = kk.y + zy[i];
      if (vis[xx + di][yy + di]) continue;
      node tt;
      tt.x = xx;
      tt.y = yy;
      tt.bs = kk.bs + 1;
      vis[xx + di][yy + di] = 1;
      q.push(tt);
    }
  }
  return;
}
signed main() {
  scanf("%lld%lld", &k, &n);
  long long rr = k;
  if (k > 500) {
    k = 500;
  }
  for (long long i = 1; i <= n; ++i) {
    long long x, y;
    scanf("%lld%lld", &x, &y);
    vis[x + di][y + di] = 1;
  }
  bfs(0, 0);
  if (rr <= 500) {
    long long ans = 0;
    for (long long i = 0; i <= rr; ++i) ans = (ans + anss[i]) % mod;
    printf("%lld", ans);
  } else {
    long long ans = 0, gs = (rr - 499) % mod;
    for (long long i = 0; i <= 499; ++i) ans = (ans + anss[i]) % mod;
    long long zh = (ans + anss[499] * gs % mod +
                    (gs * (gs + 1) / 2) % mod * (anss[500] - anss[499]) % mod) %
                   mod;
    printf("%lld", zh);
  }
  return 0;
}
