#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';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovKgogIEJlbiBXYXRzb24KICBIYW5kbGUgY29kZWZvcmNlcyA6IHF1YW5nbWluaDk4CgogIE11YSBDb2RlIG5odSBtdWEgRmxvcmVudGlubyAhIQoqLwoKI2RlZmluZSBsbCBsb25nIGxvbmcKCmNvbnN0IHN0cmluZyBuYW1lID0gInRlc3QiOwoKdm9pZCBzb2x2ZSgpOwpzaWduZWQgbWFpbigpCnsKICAgIGlmIChmb3BlbigobmFtZSArICIuaW5wIikuY19zdHIoKSwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKChuYW1lICsgIi5pbnAiKS5jX3N0cigpLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKChuYW1lICsgIi5vdXQiKS5jX3N0cigpLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBzb2x2ZSgpOwoKICAgIHJldHVybiAwOwp9CgovLyBtYWluIHByb2dyYW0KYm9vbCB3cmFwKGludCBhLCBpbnQgeCwgaW50IGIpIHsgcmV0dXJuIGEgPD0geCAmJiB4IDw9IGI7IH0KCnZvaWQgc29sdmUoKQp7CiAgICBpbnQgbiwgbTsgY2luID4+IG4gPj4gbTsKICAgIHNldDxwYWlyPGludCwgaW50Pj4gc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykKICAgIHsKICAgICAgICBpbnQgeCwgeTsgY2luID4+IHggPj4geTsKICAgICAgICBpZiAoeCA9PSB5KQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoeCA+IHkpIHN3YXAoeCwgeSk7CiAgICAgICAgaWYgKHggJSBuID09IDEgJiYgYWJzKHggLSB5KSA8PSBuKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoeCA9PSAxICYmIHkgPj0gMyAqIG4gKyAxKQogICAgICAgIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBzZS5pbnNlcnQoe3gsIHl9KTsKICAgIH0KICAgIHZlY3RvcjxwYWlyPGludCwgaW50Pj4gZWRnZXM7CiAgICBmb3IgKHBhaXI8aW50LCBpbnQ+IGl0IDogc2UpCiAgICB7CiAgICAgICAgaWYgKGl0LmZpcnN0IDwgaXQuc2Vjb25kKQogICAgICAgICAgICBlZGdlcy5wdXNoX2JhY2soe2l0LmZpcnN0LCBpdC5zZWNvbmR9KTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVkZ2VzLnB1c2hfYmFjayh7aXQuc2Vjb25kLCBpdC5maXJzdH0pOwogICAgfQogICAgbSA9IGVkZ2VzLnNpemUoKTsKCiAgICB2ZWN0b3I8cGFpcjxpbnQsIGludD4+IGNvb3IoNCAqIG4gKyAxLCB7MCwgMH0pOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgIGNvb3JbaV0gPSBtYWtlX3BhaXIoMCwgbiAtIGkgKyAxKTsKICAgIGZvciAoaW50IGkgPSBuICsgMTsgaSA8PSAyICogbjsgaSsrKQogICAgICAgIGNvb3JbaV0gPSBtYWtlX3BhaXIoaSAtIG4gLSAxLCAwKTsKICAgIGZvciAoaW50IGkgPSAyICogbiArIDE7IGkgPD0gMyAqIG47IGkrKykKICAgICAgICBjb29yW2ldID0gbWFrZV9wYWlyKG4sIGkgLSAyICogbiAtIDEpOwogICAgZm9yIChpbnQgaSA9IDMgKiBuICsgMTsgaSA8PSA0ICogbjsgaSsrKQogICAgICAgIGNvb3JbaV0gPSBtYWtlX3BhaXIobiAtIChpIC0gMyAqIG4gLSAxKSwgbik7CgogICAgbGwgcmVzID0gMjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbTsgaSsrKQogICAgewogICAgICAgIHJlcysrOwogICAgICAgIHNldDxwYWlyPGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZT4+IHNlOwogICAgICAgIGludCB1ID0gZWRnZXNbaV0uZmlyc3QsIHYgPSBlZGdlc1tpXS5zZWNvbmQ7CiAgICAgICAgbG9uZyBkb3VibGUgYTEgPSAoY29vclt2XS5zZWNvbmQgLSBjb29yW3VdLnNlY29uZCkgLyAoY29vclt2XS5maXJzdCAtIGNvb3JbdV0uZmlyc3QpOwogICAgICAgIGxvbmcgZG91YmxlIGIxID0gKGNvb3JbdV0uc2Vjb25kICogY29vclt2XS5maXJzdCAtIGNvb3JbdV0uZmlyc3QgKiBjb29yW3ZdLnNlY29uZCkgLyAoY29vclt2XS5maXJzdCAtIGNvb3JbdV0uZmlyc3QpOwogICAgICAgIGZvciAoaW50IGogPSBpIC0gMTsgaiA+PSAwOyBqLS0pCiAgICAgICAgewogICAgICAgICAgICBpbnQgYSA9IGVkZ2VzW2pdLmZpcnN0LCBiID0gZWRnZXNbal0uc2Vjb25kOwogICAgICAgICAgICBpZiAoZWRnZXNbaV0uZmlyc3QgPT0gZWRnZXNbal0uZmlyc3QgfHwgZWRnZXNbaV0uc2Vjb25kID09IGVkZ2VzW2pdLnNlY29uZCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKDFsbCAqICh1IC0gYSkgKiAoYiAtIHYpID4gMCB8fCB3cmFwKGEsIHUsIGIpIHx8IHdyYXAoYSwgdiwgYikgfHwgd3JhcCh1LCBhLCB2KSB8fCB3cmFwKHUsIGIsIHYpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSB4MSA9IGNvb3JbYV0uZmlyc3QsIHkxID0gY29vclthXS5zZWNvbmQ7CiAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSB4MiA9IGNvb3JbYl0uZmlyc3QsIHkyID0gY29vcltiXS5zZWNvbmQ7CiAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSBhMiA9ICh5MiAtIHkxKSAvICh4MiAtIHgxKTsKICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlIGIyID0gKHkxICogeDIgLSB4MSAqIHkyKSAvICh4MiAtIHgxKTsKCiAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSB4eHggPSAoYjIgLSBiMSkgLyAoYTEgLSBhMik7CiAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSB5eXkgPSAoYTEgKiBiMiAtIGIxICogYTIpIC8gKGExIC0gYTIpOwogICAgICAgICAgICAgICAgc2UuaW5zZXJ0KHt4eHgsIHl5eX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlcyArPSBzZS5zaXplKCk7CiAgICB9CgogICAgY291dCA8PCByZXMgPDwgJ1xuJzsKfQo=