#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("-O2")
const int LIM = 5e5 + 5, MOD = 1e9 + 7;
int t, n, m, k, pre, ans;
int lang[105], rk[105];
int parent(int i) { return (lang[i] == i) ? i : (lang[i] = parent(lang[i])); }
void connect(int i, int j) {
  if (lang[i] != 0) i = parent(i);
  j = parent(j);
  if (rk[i] > rk[j]) {
    lang[j] = i;
  } else {
    lang[i] = j;
    if (rk[i] == rk[j]) rk[j]++;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> m;
    if (m == 0)
      ans++;
    else {
      cin >> t;
      if (lang[t] == 0) lang[t] = t;
      pre = t;
      for (int i = 0; i < m - 1; i++) cin >> t, connect(t, pre);
    }
  }
  set<int> s;
  for (int t = 1; t < k + 1; t++) {
    if (lang[t]) s.insert(parent(lang[t]));
  }
  if (s.empty()) s.insert(1);
  cout << ans + s.size() - 1;
  return 0;
}
