using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Numerics;




namespace contest
{

    class contest
    {


        static void Main(string[] args)
        {


            
            var num = Console.ReadLine().Split().Select(int.Parse).ToArray();
            long n = num[0];
            int m = num[1];
            var person = new int[n][];
            var dic = new Dictionary<int, SortedSet<int>>();
            var lang = new SortedSet<int>[m+1];
            for (int i = 0; i < m; i++) lang[i + 1] = new SortedSet<int>();
            for (int i=0; i< n; i++)
            {
                person[i] = Console.ReadLine().Split().Select(int.Parse).ToArray();
                dic[i + 1] = new SortedSet<int>();
                //for (int j = 1; j <= person[i][0]; j++)
                //{
                //    dic[i + 1].Add(person[i][j]);
                //    lang[person[i][j]].Add(i + 1);
                //}

            }


            Array.Sort(person, (a, b) =>   a[0] - b[0]);
            for (int i = 0; i < n; i++)
            {
               
                for (int j = 1; j <= person[i][0]; j++)
                {
                    dic[i + 1].Add(person[i][j]);
                    lang[person[i][j]].Add(i + 1);
                }

            }

            //var memo = new UnionFind(n);
            var memoP = new bool[n+1];
            var memoL = new bool[m + 1];
            memoP[0] = true;
            memoL[0] = true;

            long count = 0;
            long need = (n * (n + 1) / 2);

            bool ll = true;
            var queP = new Queue<int>();
            var queL = new Queue<int>();
            for(int i=1; i<person[0].Length; i++)
            {
                queL.Enqueue(person[0][i]);
                memoL[person[0][i]] = true;
            }
            count += 1;
            memoP[1] = true;

            while(queL.Count()>0 || queP.Count()>0)
            {
                if(ll)
                {
                    if (queL.Count() > 0)
                    {
                        int cur = queL.Dequeue();

                        foreach (var item in lang[cur])
                        {
                            if (!memoP[item])
                            {
                                queP.Enqueue(item);
                                memoP[item] = true;
                                count += item;
                            }

                        }
                    }

                    ll = false;
                }
                else
                {
                    if (queP.Count() > 0)
                    {
                        int cur = queP.Dequeue();

                        foreach (var item in dic[cur])
                        {
                            if (!memoL[item])
                            {
                                queL.Enqueue(item);
                                memoL[item] = true;

                            }

                        }
                    }


                    ll = true;

                    if (count == need) break;
                }

               

            }


            if (count == need) Console.WriteLine("YES");
            else Console.WriteLine("NO");
           
			
           
        }

      
    }

   
}




Measured memory_bytes: 38168