#include <bits/stdc++.h>
using namespace std;
int mp[2003][2003];
int Ans_[600];
const int mod = 1e9 + 7;
int dx[] = {1, 1, -1, -1, 2, 2, -2, -2};
int dy[] = {2, -2, 2, -2, 1, -1, 1, -1};
struct Point {
  int x, y;
};
queue<int> qx, qy;
int n;
long long k, cnt;
inline void bfs(int x, int y) {
  mp[x][y] = 1;
  qx.push(x);
  qy.push(y);
  while (!qx.empty()) {
    int nowx = qx.front();
    qx.pop();
    int nowy = qy.front();
    qy.pop();
    (++Ans_[mp[nowx][nowy]]) %= mod;
    if (mp[nowx][nowy] > k + 1 || mp[nowx][nowy] > 500) break;
    for (register int i = 0; i < 8; ++i) {
      int xx = nowx + dx[i];
      int yy = nowy + dy[i];
      if (mp[xx][yy]) continue;
      mp[xx][yy] = mp[nowx][nowy] + 1;
      qx.push(xx);
      qy.push(yy);
    }
  }
}
signed main() {
  scanf("%lld%d", &k, &n);
  for (register int i = 1, x, y; i <= n; ++i)
    scanf("%d%d", &x, &y), mp[x + 1001][y + 1001] = 1;
  bfs(1001, 1001);
  if (k < 500) {
    for (register int i = 1; i <= k + 1; ++i) (cnt += Ans_[i]) %= mod;
    printf("%lld\n", cnt);
  } else {
    (k -= 498) %= mod;
    for (register int i = 0; i <= 499; ++i) (cnt += Ans_[i]) %= mod;
    printf("%lld\n", (((k * Ans_[500] % mod + cnt) % mod +
                       (k * (k - 1) >> 1) % mod *
                           (long long)(Ans_[500] - Ans_[499]) % mod) %
                          mod +
                      mod) %
                         mod);
  }
  return 0;
}
