#include <bits/stdc++.h>
using namespace std;
vector<int> c[1000010];
int a[1000010], r[1000010];
int n, d;
int get(int x, int y) {
  if (c[x].size() < y) return 0;
  return c[x][y - 1];
}
int main() {
  cin >> n >> d;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    for (int j = 1; j <= a[i]; j++) {
      int x;
      scanf("%d", &x);
      c[i].push_back(x);
    }
  }
  for (int i = 1; i < n; i++) {
    int m = min(a[i], a[i + 1]);
    int k = -1;
    for (int j = 1; j <= m; j++)
      if (get(i, j) != get(i + 1, j)) {
        k = j;
        break;
      }
    if (k == -1) {
      if (c[i].size() <= c[i + 1].size())
        continue;
      else {
        puts("-1");
        return 0;
      }
    }
    int x = get(i, k);
    int y = get(i + 1, k);
    if (x < y) {
      r[d - y + 1]--;
      r[d - x + 1]++;
    } else {
      r[0]--;
      r[d - x + 1]++;
      r[d - y + 1]--;
    }
  }
  int tot = 0;
  for (int i = 0; i < d; i++) {
    tot += r[i];
    if (tot >= 0) {
      printf("%d\n", i);
      return 0;
    }
  }
  puts("-1");
  return 0;
}
