#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int fx[] = {+1, -1, +0, +0, +1, +1, -1, -1, +0};
int fy[] = {+0, +0, +1, -1, +1, -1, +1, -1, +0};
template <typename T>
inline T GCD(T a, T b) {
  a = abs(a);
  b = abs(b);
  while (b) {
    a = a % b;
    swap(a, b);
  }
  return a;
}
template <typename T>
inline T LCM(T x, T y) {
  T tp = GCD(x, y);
  if ((x / tp) * 1. * y > 9e18) return 9e18;
  return (x / tp) * y;
}
template <typename T>
void scani(T &n) {
  n = 0;
  bool negative = false;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') negative = true;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    n = n * 10 + c - 48;
    c = getchar();
  }
  if (negative) n = ~(n - 1);
}
template <typename T>
void write(T n, bool line = true) {
  if (n < 0) {
    putchar('-');
    n = -n;
  }
  if (!n) {
    putchar('0');
    if (line) putchar('\n');
    return;
  }
  char buff[22];
  int len = 0;
  while (n) buff[len++] = n % 10 + 48, n /= 10;
  for (int i = len - 1; i >= 0; i--) putchar(buff[i]);
  if (line) putchar('\n');
}
int scans(char *a) {
  int i = 0;
  char c = 0;
  while (c < 33) c = getchar();
  while (c > 33) {
    a[i++] = c;
    c = getchar();
  }
  a[i] = 0;
  return i;
}
int main() {
  set<vector<int> > st;
  int n, m;
  scani(n), scani(m);
  int ans = 0;
  int tp = 0;
  for (int i = 0; i < m; i++) {
    tp = 0;
    vector<int> vv;
    int t, x;
    scani(t), scani(x);
    vv.push_back(x);
    for (int j = 1; j < t; j++) {
      int y;
      scani(y);
      if (x + 1 != y) {
        st.insert(vv);
        vv.clear();
        vv.push_back(y);
        ans++;
      } else
        vv.push_back(y);
      x = y;
    }
    if (!vv.empty()) st.insert(vv);
  }
  auto it = st.begin();
  it++;
  while (it != st.end()) {
    ans += 2 * ((*it).size()) - 1;
    it++;
  }
  write(ans);
  return 0;
}
