#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb(x) push_back(x)
#define pop pop_back()
using db = double;
using pii = pair < int, int >;
using pll = pair < ll, ll >;
#define rep(i,x,n,inc) for(i=x ; i<n ; i+=inc)
#define repr(i,x,n,inc) for( i=x ; i>n ; i+=inc)
#define ex exit(0)
#define all(a) (a).begin(),(a).end()
#define mp(a,b) make_pair(a,b)
#define F first
#define S second
#define edl "\n"
const int mod = 1e9+7;
const double pi = acos(-1);
const int infi = INT_MAX;
const long long infl = LLONG_MAX;
ll m,n;
map<ll,bool> visit;
vector <ll> lg[1001];
vector <ll> adj[1001];
ll dfs(ll u){
visit[u]=true;
for(auto l:adj[u]){
for(auto v:lg[l]){
if(!visit[v]){
dfs(v);
}
}
}
}
int helper(){
int c=0;
for(ll i=1;i<=n;i++){
if(!visit[i]){
dfs(i);
// cout<<i<<"not visited\n";
c++;
}
}
if(c!=0)c--;
return c;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t,i,x,j,k,tem=0;
cin>>n>>m;
rep(i,1,n+1,1){
cin>>x;
if(x==0){
tem++;
visit[i]=true;
}
while(x--){
cin>>k;
lg[k].push_back(i);
adj[i].pb(k);
}
}
cout<<helper()+tem;
}
CiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nICBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHBiKHgpIHB1c2hfYmFjayh4KQojZGVmaW5lIHBvcCBwb3BfYmFjaygpCnVzaW5nIGRiID0gZG91YmxlOwp1c2luZyBwaWkgPSBwYWlyIDwgaW50LCBpbnQgPjsKdXNpbmcgcGxsID0gcGFpciA8IGxsLCBsbCA+OwoKI2RlZmluZSByZXAoaSx4LG4saW5jKSBmb3IoaT14IDsgaTxuIDsgaSs9aW5jKQojZGVmaW5lIHJlcHIoaSx4LG4saW5jKSBmb3IoIGk9eCA7IGk+biA7IGkrPWluYykKI2RlZmluZSBleCBleGl0KDApCiNkZWZpbmUgYWxsKGEpICAgICAgKGEpLmJlZ2luKCksKGEpLmVuZCgpCiNkZWZpbmUgbXAoYSxiKSBtYWtlX3BhaXIoYSxiKQojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTICAgICAgICAgICBzZWNvbmQKI2RlZmluZSBlZGwgIlxuIgpjb25zdCBpbnQgbW9kID0gMWU5Kzc7CmNvbnN0IGRvdWJsZSBwaSA9IGFjb3MoLTEpOwpjb25zdCBpbnQgaW5maSA9IElOVF9NQVg7CmNvbnN0IGxvbmcgbG9uZyBpbmZsID0gTExPTkdfTUFYOwoKCmxsIG0sbjsKbWFwPGxsLGJvb2w+IHZpc2l0Owp2ZWN0b3IgPGxsPiBsZ1sxMDAxXTsKdmVjdG9yIDxsbD4gYWRqWzEwMDFdOwoJCgkKbGwJZGZzKGxsIHUpewoJdmlzaXRbdV09dHJ1ZTsKCWZvcihhdXRvIGw6YWRqW3VdKXsKCQkKCQlmb3IoYXV0byB2OmxnW2xdKXsKCQkJaWYoIXZpc2l0W3ZdKXsKCQkJCWRmcyh2KTsKCQkJfQoJCX0KCX0KCQp9CgoKCgppbnQgaGVscGVyKCl7CglpbnQgYz0wOwoJCglmb3IobGwgaT0xO2k8PW47aSsrKXsKCQlpZighdmlzaXRbaV0pewoJCQlkZnMoaSk7CgkJLy8JY291dDw8aTw8Im5vdCB2aXNpdGVkXG4iOwoJCQljKys7CgkJfQoJfQoJaWYoYyE9MCljLS07CglyZXR1cm4gYzsKfQoKCmludCBtYWluKCl7Cmlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwpjaW4udGllKE5VTEwpOwoKaW50IHQsaSx4LGosayx0ZW09MDsKY2luPj5uPj5tOwoKCXJlcChpLDEsbisxLDEpewoJCWNpbj4+eDsKCQlpZih4PT0wKXsKCQkJdGVtKys7CgkJCXZpc2l0W2ldPXRydWU7CgkJfQoJCXdoaWxlKHgtLSl7CgkJCWNpbj4+azsKCQkJbGdba10ucHVzaF9iYWNrKGkpOwoJCQlhZGpbaV0ucGIoayk7CgkJfQoJfQoKY291dDw8aGVscGVyKCkrdGVtOwp9Cg==