#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
const int N = 500010;
const int INF = 0x3f3f3f3f;
void MOD(long long &a) {
  if (a >= mod) a -= mod;
}
void MOD(long long &a, long long c) {
  if (a >= c) a -= c;
}
void ADD(long long &a, long long b) {
  a += b;
  MOD(a);
}
void ADD(long long &a, long long b, long long c) {
  a += b;
  MOD(a, c);
}
long long qpow(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    a = a * a % mod;
    b /= 2;
  }
  return ans;
}
long long qpow(long long a, long long b, long long c) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % c;
    a = a * a % c;
    b /= 2;
  }
  return ans;
}
vector<int> v[N];
int n, c;
vector<int> s, e;
int main() {
  scanf("%d%d", &n, &c);
  for (int i = 0; i < n; i++) {
    int w;
    scanf("%d", &w);
    for (int j = 0; j < w; j++) {
      int x;
      scanf("%d", &x);
      v[i].push_back(x);
    }
  }
  for (int i = 0; i < n - 1; i++) {
    int j = 0;
    while (((int)v[i].size()) > j && ((int)v[i + 1].size()) > j &&
           v[i][j] == v[i + 1][j])
      j++;
    if (((int)v[i].size()) > j && ((int)v[i + 1].size()) > j) {
      if (v[i][j] < v[i + 1][j]) {
        s.push_back(0);
        e.push_back(c - v[i + 1][j] + 1);
        s.push_back(c - v[i][j] + 1);
        e.push_back(c);
      } else {
        s.push_back(c - v[i][j] + 1);
        e.push_back(c - v[i + 1][j] + 1);
      }
    } else if (((int)v[i].size()) != j && ((int)v[i + 1].size()) == j) {
      printf("-1\n");
      return 0;
    } else {
      s.push_back(0);
      e.push_back(c);
    }
  }
  sort((s).begin(), (s).end()), sort((e).begin(), (e).end());
  int ans = -1, j = 0, k = 0, tot = 0;
  for (int i = 0; i < c; i++) {
    while (j < ((int)s.size()) && s[j] == i) {
      tot++;
      j++;
    }
    while (k < ((int)e.size()) && e[k] == i) {
      tot--;
      k++;
    }
    if (tot == n - 1) {
      ans = i;
      break;
    }
  }
  printf("%d\n", ans);
}
