#include<iostream>
using namespace std;
int g[333][333], vis[333], lin[333], n;
int find(int node)
{
for (int i = 1; i <= n; i++)
if (!vis[i] && g[node][i])
{
vis[i] = 1;
if (!lin[i] || find(lin[i]))
{
lin[i] = node;
return 1;
}
}
return 0;
}
int main()
{
int cas, i, j, x, p;
//freopen("D:\\input.txt","r",stdin);
cin >> cas;
while (cas--)
{
memset(g, 0, sizeof(g));
cin >> p >> n;
for (i = 1; i <= p; i++)
{
int m;
cin >> m;
for (j = 1, x; j <= m; j++)
cin >> x, g[i][x] = 1;
}
memset(lin, 0, sizeof lin);
for (i = 1; i <= p; i++)
{
memset(vis, 0, sizeof (vis));
if (!find(i))
break;
}
if (i <= p)cout << "NO" << endl;
else
cout << "YES" << endl;
}
return 0;
}