#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
 
int par[200005];
int high[200005];
//n要素で初期化
void init(int n){
  for(int i=0; i<n; i++){
    par[i]=i;
    high[i]=0;
  }
}
//木の根を求める
int find(int x){
  if(par[x]==x){
    return x;
  }
  else{
    return par[x]=find(par[x]);
  }
}
 
//xとyの属する集合を併合
void unite(int x,int y){
  x=find(x);
  y=find(y);
  if(x==y)return;
  if(high[x]<high[y]){
    par[x]=y;
  }else{
    par[y]=x;
    if(high[x]==high[y])high[x]++;
  }
}
//xとyが同じ集合に属するか否か
bool same(int x,int y){
  return find(x)==find(y);
}
int main(){
  int n,m;
  cin>>n>>m;
  init(n+m);
  for(int i=0; i<n; i++){
    int k;
    cin>>k;
    for(int j=0; j<k; j++){
      int L;
      cin>>L;
      unite(i,n+L-1);
    }
  }
  bool flag=true;
  for(int i=0; i<n-1; i++){
    if(!same(i,i+1)){
      flag=false;
    }
  }
  cout<<((flag) ? "YES" : "NO" )<<endl;
}
      
  