#include <bits/stdc++.h>
using namespace std;

int N, M;
vector < int > G[100005];
vector < int > lang[100005];
bool flag[100005] = {};
int dfs(int v)
{
    int ret = 0;
    flag[v] = true;
    for(int i = 0; i < G[v].size(); i++) {
        if(!flag[G[v][i]]) ret += dfs(G[v][i]);
    }
    return (++ret);
}
int main()
{
    cin >> N >> M;
    for(int i = 0; i < N; i++) {
        int K;
        cin >> K;
        for(int j = 0; j < K; j++) {
            int L;
            cin >> L;
            lang[L - 1].push_back(i);
        }
    }

    for(int i = 0; i < M; i++) {
        for(int j = 1; j < lang[i].size(); j++) {
            G[lang[i][j]].push_back(lang[i][j - 1]);
            G[lang[i][j - 1]].push_back(lang[i][j]);
        }
    }

    if(dfs(0) == N) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }

    return (0);
}
