#include <bits/stdc++.h>
using namespace std;
const int md = 1000000007;
const int ms = 300;
const int ml = ms * 2;
int ans[ms + 10], del[ms + 10], d[ml * 2 + 10][ml * 2 + 10],
    f[ml * 2 + 10][ml * 2 + 10], st[(ml * 2 + 10) * (ml * 2 + 10)][2],
    dl[ml * 2 + 10][ml * 2 + 10];
int p[8][2] = {{2, 1},  {1, 2},  {-1, 2},  {2, -1},
               {-2, 1}, {1, -2}, {-1, -2}, {-2, -1}};
int main() {
  int m, x, y;
  long long n;
  scanf("%I64d%d", &n, &m);
  memset(dl, 0, sizeof(dl));
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &x, &y);
    dl[x + ml][y + ml] = 1;
  }
  memset(ans, 0, sizeof(ans));
  ans[0] = 1;
  memset(f, 0, sizeof(f));
  st[0][0] = 0, st[0][1] = 0;
  f[0 + ml][0 + ml] = 1;
  d[0 + ml][0 + ml] = 0;
  for (int low = 0, top = 0; low <= top; low++) {
    int x = st[low][0], y = st[low][1];
    if (d[x + ml][y + ml] == ms) break;
    for (int i = 0; i < 8; i++) {
      int x_ = x + p[i][0], y_ = y + p[i][1];
      if (dl[x_ + ml][y_ + ml]) continue;
      if (!f[x_ + ml][y_ + ml]) {
        f[x_ + ml][y_ + ml] = 1;
        d[x_ + ml][y_ + ml] = d[x + ml][y + ml] + 1;
        ans[d[x + ml][y + ml] + 1]++;
        st[++top][0] = x_;
        st[top][1] = y_;
      }
    }
  }
  for (int i = 1; i <= ms; i++) ans[i] += ans[i - 1];
  if (n <= ms) {
    printf("%d\n", ans[n]);
    return 0;
  }
  for (int i = 1; i <= ms; i++) del[i] = ans[i] - ans[i - 1];
  int tmp = del[ms] - del[ms - 1];
  n -= ms;
  int res = ans[ms];
  res = (n % md * del[ms] % md + res) % md;
  if (n & 1)
    res = ((n + 1) / 2 % md * (n % md) % md * tmp + res) % md;
  else
    res = (n / 2 % md * ((n + 1) % md) % md * tmp + res) % md;
  printf("%d\n", res);
  return 0;
}
