#include <bits/stdc++.h>
using namespace std;
const long long p = 1000000007;
bool g[30][30];
bool v[4100][4100];
int dx[] = {-2, -1, -1, -2, 2, 1, 1, 2};
int dy[] = {-1, -2, 2, 1, -1, -2, 2, 1};
struct T {
  int x, y, time;
};
long long ans = 0, cnt[610];
int main() {
  int n, x, y;
  long long m;
  scanf("%I64d%d", &m, &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d%d", &x, &y);
    if (abs(x) > 10 || abs(y) > 10) continue;
    g[x + 15][y + 15] = true;
  }
  queue<T> q;
  q.push((T){0, 0, 0});
  v[2000][2000] = true;
  while (!q.empty()) {
    T now = q.front();
    q.pop();
    ++cnt[now.time];
    if (now.time == 500) continue;
    for (int i = 0; i < 8; ++i) {
      int r = now.x + dx[i], c = now.y + dy[i];
      if (v[r + 2000][c + 2000] ||
          abs(r) <= 10 && abs(c) <= 10 && g[r + 15][c + 15])
        continue;
      v[r + 2000][c + 2000] = true;
      q.push((T){r, c, now.time + 1});
    }
  }
  if (m <= 500) {
    for (int i = 0; i <= m; ++i) ans = (ans + cnt[i]) % p;
    printf("%I64d\n", ans);
  } else {
    for (int i = 0; i <= 499; ++i) ans = (ans + cnt[i]) % p;
    m -= 499;
    m %= p;
    ans = (ans + cnt[499] * m % p) % p;
    long long a = m + 1, b = m;
    if (a & 1)
      b /= 2;
    else
      a /= 2;
    a %= p, b %= p;
    ans = (ans + (cnt[500] - cnt[499]) * a % p * b % p) % p;
    printf("%I64d\n", (ans + p) % p);
  }
  return 0;
}
