#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int c[maxn];
int lowbit(int x) { return x & (-x); }
void update(int i, int k) {
  while (i < maxn) {
    c[i] += k;
    i += lowbit(i);
  }
}
int get(int i) {
  int res = 0;
  while (i > 0) {
    res += c[i];
    i -= lowbit(i);
  }
  return res;
}
void range_add(int l, int r, int k) {
  ++l;
  ++r;
  update(l, k);
  update(r + 1, -k);
}
int main() {
  int n, c;
  cin >> n >> c;
  vector<vector<int>> w(n);
  for (int i = 0; i < n; i++) {
    int size;
    cin >> size;
    w[i].resize(size);
    for (int j = 0; j < size; j++) {
      cin >> w[i][j];
      --w[i][j];
    }
  }
  for (int i = 1; i < n; i++) {
    int m1 = w[i - 1].size(), m2 = w[i].size();
    int idx = 0;
    while (idx < m1 && idx < m2) {
      if (w[i - 1][idx] != w[i][idx]) {
        break;
      }
      idx++;
    }
    if (idx == m1) {
      range_add(0, c - 1, 1);
      continue;
    }
    if (idx == m2) {
      cout << -1 << endl;
      return 0;
    }
    int a = w[i - 1][idx], b = w[i][idx];
    if (a < b) {
      range_add(0, c - b - 1, 1);
      range_add(c - a, c - 1, 1);
    } else {
      range_add(c - a, c - b - 1, 1);
    }
  }
  for (int i = 1; i <= c; i++) {
    if (get(i) == n - 1) {
      cout << i - 1 << endl;
      return 0;
    }
  }
  cout << -1 << endl;
}
