#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<vector<int> > g;
int used[150];
void dfs(int i, int k) {
  used[i] = k;
  for (int j = 0; j < g[i].size(); j++) {
    for (int t = 0; t < n; t++) {
      for (int tt = 0; tt < g[t].size(); tt++) {
        if (g[i][j] == g[t][tt] && used[t] == 0) {
          dfs(t, k);
        }
      }
    }
  }
  return;
}
int main() {
  cin >> n >> m;
  g.resize(n);
  int pp = 0;
  for (int i = 0; i < n; i++) {
    int s;
    cin >> s;
    if (s == 0) pp++;
    g[i].resize(s);
    for (int j = 0; j < s; j++) cin >> g[i][j];
  }
  int k = 0;
  for (int i = 0; i < n; i++) {
    if (used[i] == 0) {
      dfs(i, ++k);
    }
  }
  if (k - 1 < pp)
    cout << pp;
  else
    cout << (k - 1);
  return 0;
}
