#include <bits/stdc++.h>
using namespace std;
namespace program {
long long dx[] = {0, 1, 1, -1, -1, 2, 2, -2, -2},
          dy[] = {0, 2, -2, 2, -2, 1, -1, 1, -1};
struct node {
  long long t, x, y;
} a, b;
bool limit[3010][3010];
long long Ans[510], k, n;
inline void work() {
  cin >> k >> n;
  for (long long i = 1, x, y; i <= n; i++)
    cin >> x >> y, limit[x + 1000][y + 1000] = 1;
  limit[1000][1000] = 1;
  Ans[0] = 1;
  b.t = 0;
  b.x = 1000;
  b.y = 1000;
  queue<node> q;
  q.push(b);
  while (!q.empty()) {
    a = q.front();
    q.pop();
    for (long long i = 1; i <= 8; i++) {
      if (!limit[(a.x + dx[i])][(a.y + dy[i])] && a.t + 1 <= 500) {
        Ans[a.t + 1] += 1;
        limit[(a.x + dx[i])][(a.y + dy[i])] = 1;
        b.t = a.t + 1;
        b.x = (a.x + dx[i]);
        b.y = (a.y + dy[i]);
        q.push(b);
      }
    }
  }
  if (k <= 500) {
    long long res = 0;
    for (long long i = 0; i <= k; i++) res = (res + Ans[i]) % 1000000007;
    cout << res << '\n';
    exit(0);
  } else {
    long long inc = Ans[500] - Ans[499], res = 0;
    for (long long i = 0; i < 500; i++) res = (res + Ans[i]) % 1000000007;
    k -= 499;
    k %= 1000000007;
    cout << (res % 1000000007 + k * Ans[500] % 1000000007 +
             k * (k - 1) / 2 % 1000000007 * inc % 1000000007) %
                1000000007;
  }
}
}  // namespace program
signed main() {
  program::work();
  return 0;
}
