#include <bits/stdc++.h>
using namespace std;

/*
  Ben Watson
  Handle codeforces : quangminh98

  Mua Code nhu mua Florentino !!
*/

#define ll long long

const string name = "test";

void solve();
signed main()
{
    if (fopen((name + ".inp").c_str(), "r"))
    {
        freopen((name + ".inp").c_str(), "r", stdin);
        freopen((name + ".out").c_str(), "w", stdout);
    }
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    solve();

    return 0;
}

// main program
bool wrap(int a, int x, int b) { return a <= x && x <= b; }

void solve()
{
    int n, m; cin >> n >> m;
    set<pair<int, int>> se;
    for (int i = 0; i < m; i++)
    {
        int x, y; cin >> x >> y;
        if (x == y)
            continue;
        if (x > y) swap(x, y);
        if (x % n == 1 && abs(x - y) <= n)
            continue;
        if (x == 1 && y >= 3 * n + 1)
        {
            continue;
        }

        se.insert({x, y});
    }
    vector<pair<int, int>> edges;
    for (pair<int, int> it : se)
    {
        if (it.first < it.second)
            edges.push_back({it.first, it.second});
        else
            edges.push_back({it.second, it.first});
    }
    m = edges.size();

    vector<pair<int, int>> coor(4 * n + 1, {0, 0});
    for (int i = 1; i <= n; i++)
        coor[i] = make_pair(0, n - i + 1);
    for (int i = n + 1; i <= 2 * n; i++)
        coor[i] = make_pair(i - n - 1, 0);
    for (int i = 2 * n + 1; i <= 3 * n; i++)
        coor[i] = make_pair(n, i - 2 * n - 1);
    for (int i = 3 * n + 1; i <= 4 * n; i++)
        coor[i] = make_pair(n - (i - 3 * n - 1), n);

    ll res = 2;
    for (int i = 1; i < m; i++)
    {
        res++;
        set<pair<long double, long double>> se;
        int u = edges[i].first, v = edges[i].second;
        long double a1 = (coor[v].second - coor[u].second) / (coor[v].first - coor[u].first);
        long double b1 = (coor[u].second * coor[v].first - coor[u].first * coor[v].second) / (coor[v].first - coor[u].first);
        for (int j = i - 1; j >= 0; j--)
        {
            int a = edges[j].first, b = edges[j].second;
            if (edges[i].first == edges[j].first || edges[i].second == edges[j].second)
                continue;

            if (1ll * (u - a) * (b - v) > 0 || wrap(a, u, b) || wrap(a, v, b) || wrap(u, a, v) || wrap(u, b, v))
            {
                long double x1 = coor[a].first, y1 = coor[a].second;
                long double x2 = coor[b].first, y2 = coor[b].second;
                long double a2 = (y2 - y1) / (x2 - x1);
                long double b2 = (y1 * x2 - x1 * y2) / (x2 - x1);

                long double xxx = (b2 - b1) / (a1 - a2);
                long double yyy = (a1 * b2 - b1 * a2) / (a1 - a2);
                se.insert({xxx, yyy});
            }
        }
        res += se.size();
    }

    cout << res << '\n';
}
