#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define ii pair<int, int>
#define fi first
#define se second
using namespace std;
struct Line
{
int l, r;
Line(int l = 0, int r = 0) :
l(l), r(r) {};
Line operator & (Line other)
{
Line ans;
ans.l = max(l, other.l);
ans.r = min(r, other.r);
return ans;
}
};
const int maxn = 5e5;
int L, R, a[maxn + 10], ans = 0, cnt = 0;
vector<ii> points;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("LASER.INP", "r"))
{
freopen("LASER.INP", "r", stdin);
freopen("LASER.OUT", "w", stdout);
}
cin >> L >> R;
for (int i = 1; i <= R; i++)
{
int n, pre = 0, suf = 0;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
suf += a[i];
}
for (int i = 1; i <= n; pre += a[i], i++)
{
suf -= a[i];
int l_1 = pre + 1;
int r_1 = l_1 + a[i] - 1;
int r_2 = L - suf;
int l_2 = r_2 - a[i] + 1;
Line intersect = Line(l_1, r_1) & Line(l_2, r_2);
if (intersect.l > intersect.r)
continue;
points.push_back(ii(intersect.l, 1));
points.push_back(ii(intersect.r + 1, -1));
}
}
sort(points.begin(), points.end());
// for (ii pr : points)
// cout << pr.fi << ' ' << pr.se, el;
for (int i = 0; i < points.size(); )
{
if (cnt)
ans += points[i].fi - points[i - 1].fi;
int j = i;
while (j < points.size() && points[i].fi == points[j].fi)
{
cnt += points[j].se;
j++;
}
// cout << i << ' ' << j << ' ' << delta, el;
i = j;
}
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgTGluZQp7CiAgICBpbnQgbCwgcjsKCiAgICBMaW5lKGludCBsID0gMCwgaW50IHIgPSAwKSA6CiAgICAgICAgbChsKSwgcihyKSB7fTsKICAgIExpbmUgb3BlcmF0b3IgJiAoTGluZSBvdGhlcikKICAgIHsKICAgICAgICBMaW5lIGFuczsKICAgICAgICBhbnMubCA9IG1heChsLCBvdGhlci5sKTsKICAgICAgICBhbnMuciA9IG1pbihyLCBvdGhlci5yKTsKICAgICAgICByZXR1cm4gYW5zOwogICAgfQp9OwoKY29uc3QgaW50IG1heG4gPSA1ZTU7CgppbnQgTCwgUiwgYVttYXhuICsgMTBdLCBhbnMgPSAwLCBjbnQgPSAwOwp2ZWN0b3I8aWk+IHBvaW50czsKCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4oIkxBU0VSLklOUCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbigiTEFTRVIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiTEFTRVIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIGNpbiA+PiBMID4+IFI7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBSOyBpKyspCiAgICB7CiAgICAgICAgaW50IG4sIHByZSA9IDAsIHN1ZiA9IDA7CiAgICAgICAgY2luID4+IG47CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgICAgIHN1ZiArPSBhW2ldOwogICAgICAgIH0KICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBwcmUgKz0gYVtpXSwgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgc3VmIC09IGFbaV07CiAgICAgICAgICAgIGludCBsXzEgPSBwcmUgKyAxOwogICAgICAgICAgICBpbnQgcl8xID0gbF8xICsgYVtpXSAtIDE7CiAgICAgICAgICAgIGludCByXzIgPSBMIC0gc3VmOwogICAgICAgICAgICBpbnQgbF8yID0gcl8yIC0gYVtpXSArIDE7CiAgICAgICAgICAgIExpbmUgaW50ZXJzZWN0ID0gTGluZShsXzEsIHJfMSkgJiBMaW5lKGxfMiwgcl8yKTsKICAgICAgICAgICAgaWYgKGludGVyc2VjdC5sID4gaW50ZXJzZWN0LnIpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgcG9pbnRzLnB1c2hfYmFjayhpaShpbnRlcnNlY3QubCwgMSkpOwogICAgICAgICAgICBwb2ludHMucHVzaF9iYWNrKGlpKGludGVyc2VjdC5yICsgMSwgLTEpKTsKICAgICAgICB9CiAgICB9CiAgICBzb3J0KHBvaW50cy5iZWdpbigpLCBwb2ludHMuZW5kKCkpOwovLyAgICBmb3IgKGlpIHByIDogcG9pbnRzKQovLyAgICAgICAgY291dCA8PCBwci5maSA8PCAnICcgPDwgcHIuc2UsIGVsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb2ludHMuc2l6ZSgpOyApCiAgICB7CiAgICAgICAgaWYgKGNudCkKICAgICAgICAgICAgYW5zICs9IHBvaW50c1tpXS5maSAtIHBvaW50c1tpIC0gMV0uZmk7CiAgICAgICAgaW50IGogPSBpOwogICAgICAgIHdoaWxlIChqIDwgcG9pbnRzLnNpemUoKSAmJiBwb2ludHNbaV0uZmkgPT0gcG9pbnRzW2pdLmZpKQogICAgICAgIHsKICAgICAgICAgICAgY250ICs9IHBvaW50c1tqXS5zZTsKICAgICAgICAgICAgaisrOwogICAgICAgIH0KLy8gICAgICAgIGNvdXQgPDwgaSA8PCAnICcgPDwgaiA8PCAnICcgPDwgZGVsdGEsIGVsOwogICAgICAgIGkgPSBqOwogICAgfQogICAgY291dCA8PCBhbnM7Cn0K