#include <bits/stdc++.h> // NeOWami
using namespace std;
#define ft first
#define sc second
#define int long long
const int N = 3e6 + 5;
const int K = 1e4 + 5;
int n, k;
int cnt[N];
int par[N], use[N];
int find(int u) {
if (u == par[u]) return u;
return par[u] = find(par[u]);
}
void joint(int u, int v) {
u = find(u), v = find(v);
if (u == v) return;
par[u] = v;
}
signed main() {
cin.tie(NULL)->sync_with_stdio(false);
if(ifstream("EMPTY.inp")) {
freopen("EMPTY.inp", "r", stdin);
freopen("EMPTY.out", "w", stdout);
}
cin >> n >> k;
int sum = 0;
for (int i = 1; i <= k; i++) {
long long x, y, a, b; cin >> x >> y >> a >> b;
for (int j = 1; j <= y; j++) {
int pos = (a * j + b) % n;
cnt[pos] += x;
sum += x;
}
}
if (sum > n) exit(2);
for (int i = 0; i <= n; i++) par[i] = i;
for (int i = 0; i < n; i++) {
for (int j = 0; j < cnt[i]; j++) {
int pos = find(i);
use[pos] = 1;
int nxt = find((pos + 1) % n);
joint(pos, nxt);
}
}
for (int i = 0; i < n; i++) if (!use[i]) return cout << i, 0;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IC8vIE5lT1dhbWkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKI2RlZmluZSBpbnQgbG9uZyBsb25nCmNvbnN0IGludCBOID0gM2U2ICsgNTsKY29uc3QgaW50IEsgPSAxZTQgKyA1OwppbnQgbiwgazsKaW50IGNudFtOXTsKCmludCBwYXJbTl0sIHVzZVtOXTsKaW50IGZpbmQoaW50IHUpIHsKICAgIGlmICh1ID09IHBhclt1XSkgcmV0dXJuIHU7CiAgICByZXR1cm4gcGFyW3VdID0gZmluZChwYXJbdV0pOwp9CnZvaWQgam9pbnQoaW50IHUsIGludCB2KSB7CiAgICB1ID0gZmluZCh1KSwgdiA9IGZpbmQodik7CiAgICBpZiAodSA9PSB2KSByZXR1cm47CiAgICBwYXJbdV0gPSB2Owp9CnNpZ25lZCBtYWluKCkgewogICAgY2luLnRpZShOVUxMKS0+c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGlmKGlmc3RyZWFtKCJFTVBUWS5pbnAiKSkgewogICAgICAgIGZyZW9wZW4oIkVNUFRZLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIkVNUFRZLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGNpbiA+PiBuID4+IGs7CiAgICBpbnQgc3VtID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IGs7IGkrKykgewogICAgICAgIGxvbmcgbG9uZyB4LCB5LCBhLCBiOyBjaW4gPj4geCA+PiB5ID4+IGEgPj4gYjsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSB5OyBqKyspIHsKICAgICAgICAgICAgaW50IHBvcyA9IChhICogaiArIGIpICUgbjsKICAgICAgICAgICAgY250W3Bvc10gKz0geDsKICAgICAgICAgICAgc3VtICs9IHg7CiAgICAgICAgfQogICAgfQogICAgaWYgKHN1bSA+IG4pIGV4aXQoMik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHBhcltpXSA9IGk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY250W2ldOyBqKyspIHsKICAgICAgICAgICAgaW50IHBvcyA9IGZpbmQoaSk7CiAgICAgICAgICAgIHVzZVtwb3NdID0gMTsKICAgICAgICAgICAgaW50IG54dCA9IGZpbmQoKHBvcyArIDEpICUgbik7CiAgICAgICAgICAgIGpvaW50KHBvcywgbnh0KTsKICAgICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgaWYgKCF1c2VbaV0pIHJldHVybiBjb3V0IDw8IGksIDA7CiAgICByZXR1cm4gMDsKfQ==