#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
int n, m;
int c[N];
int l[N];
vector<int> g[N];
int cnt;
int s0;
void Update(int x, int y) {
  for (; x <= m; x += x & -x) c[x] += y;
}
int Query(int x) {
  int sum = s0;
  for (; x; x -= x & -x) sum += c[x];
  return sum;
}
void Add_con(int a, int b) {
  cnt++;
  if (a < b) {
    s0++;
    Update(m - b + 1, -1);
    Update(m - a + 1, 1);
  } else {
    Update(m - a + 1, 1);
    Update(m - b + 1, -1);
  }
}
bool Calc(int x, int y) {
  int mn = min(l[x], l[y]);
  for (int i = 0; i < mn; i++)
    if (g[x][i] != g[y][i]) {
      Add_con(g[x][i], g[y][i]);
      return 1;
    }
  return l[x] <= l[y];
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    int x;
    scanf("%d", &l[i]);
    for (int j = 0; j < l[i]; j++) scanf("%d", &x), g[i].push_back(x);
  }
  for (int i = 1; i < n; i++)
    if (!Calc(i, i + 1)) {
      puts("-1");
      return 0;
    }
  for (int i = 0; i <= m; i++)
    if (Query(i) == cnt) {
      printf("%d\n", i);
      return 0;
    }
  puts("-1");
  return 0;
}
