#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int ss,n,p,match[509];
bool a[509][509],use[509];
bool dfs(int i)
{
if (use[i]) return false;
use[i]=true;
for (int j=1;j<=n;j++)
if (a[i][j])
if (!match[j]||dfs(match[j]))
{
match[j]=i;
return true;
}
return false;//勿忘
}
int work()
{
int ans=0;
for (int i=1;i<=p;i++) //还是枚举p吧!枚举n会超时
{
memset(use,false,sizeof(use));
if (dfs(i)) ans++;
}
return ans;//勿忘
}
int main()
{
scanf("%d",&ss);
while (ss--)
{
memset(a,false,sizeof(a));
memset(match,0,sizeof(match));
scanf("%d%d",&p,&n);
for (int i=1;i<=p;i++)
{
int c,k;
scanf("%d",&c);
for (int j=1;j<=c;j++) scanf("%d",&k),a[i][k]=true;
}
if (work()==p)printf("YES\n");else printf("NO\n");
}
return 0;
}