#include <bits/stdc++.h>
using namespace std;
int n, m, i, x, ele, res;
bool vis[10009], f;
void dfs(int s, vector<int> g[]) {
  vis[s] = 1;
  for (int r = 0; r < g[s].size(); r++) {
    if (!vis[g[s][r]]) dfs(g[s][r], g);
  }
}
int main() {
  cin >> n >> m;
  vector<int> g[1000];
  for (i = 0; i < n; i++) {
    cin >> x;
    if (x) {
      f = 1;
      for (int y = 0; y < x; y++) {
        cin >> ele;
        g[n + 1 + i].push_back(ele);
        g[ele].push_back(n + 1 + i);
      }
    }
  }
  for (i = 0; i < n; i++) {
    if (!vis[n + 1 + i]) {
      dfs(n + 1 + i, g);
      res++;
    }
  }
  if (!f) res++;
  cout << --res << endl;
  return 0;
}
