#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
const int M = 1000000007;
const int dx[8] = {2, 2, 1, 1, -1, -1, -2, -2};
const int dy[8] = {1, -1, 2, -2, 2, -2, 1, -1};
int n, b[2010][2010];
unsigned long long k, res[505];
struct node {
  int x, y;
};
queue<node> q;
void bfs(void) {
  if (b[N][N] == -1) return;
  b[N][N] = 1;
  q.push((node){N, N});
  while (!q.empty()) {
    node a = q.front();
    q.pop();
    int x = a.x;
    int y = a.y;
    if (b[x][y] <= 500) {
      res[b[x][y]]++;
      for (int i = 0; i < 8; i++) {
        int X = x + dx[i];
        int Y = y + dy[i];
        if (b[X][Y] == 0) {
          b[X][Y] = b[x][y] + 1;
          q.push((node){X, Y});
        }
      }
    }
  }
}
int main(void) {
  cin >> k >> n;
  k = k + 1;
  for (int i = 1; i <= n; i++) {
    int x, y;
    cin >> x >> y;
    x = x + N;
    y = y + N;
    b[x][y] = -1;
  }
  bfs();
  if (k <= 500) {
    unsigned long long ans = 0;
    for (int i = 1; i <= k; i++) ans = (ans + res[i]) % M;
    cout << ans << endl;
  } else {
    unsigned long long ans = 0;
    for (int i = 1; i <= 500; i++) ans = (ans + res[i] % M) % M;
    k = k - 500;
    k = k % M;
    ans = ans % M;
    unsigned long long cha = res[500] - res[499];
    res[500] = res[500] % M;
    cha = cha % M;
    unsigned long long K;
    if (k & 1)
      K = (1 + k) / 2 * k;
    else
      K = k / 2 * (1 + k);
    K = K % M;
    unsigned long long Ans;
    Ans = ans;
    Ans = (Ans + (cha * K % M)) % M;
    Ans = (Ans + (res[500] * k % M)) % M;
    cout << Ans << endl;
  }
  return 0;
}
