#include <bits/stdc++.h>
using namespace std;
double err = 0.0000001;
int n, m;
bool g[101][101];
bool vst[101];
void dfs(int v) {
  vst[v] = 1;
  for (int i = 1; i <= m; i++) {
    if (g[v][i]) {
      for (int j = 1; j <= n; j++) {
        if (g[j][i] && !vst[j]) dfs(j);
      }
    }
  }
}
int main() {
  bool zero = 1;
  memset(g, 0, sizeof g);
  cin >> n >> m;
  int x, k;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &k);
    if (k) zero = 0;
    while (k--) {
      scanf("%d", &x);
      g[i][x] = 1;
    }
  }
  int res = 0;
  if (zero) {
    cout << n << endl;
    return 0;
  }
  memset(vst, 0, sizeof vst);
  for (int i = 1; i <= n; i++)
    if (!vst[i]) {
      res++;
      dfs(i);
    }
  cout << res - 1 << endl;
}
