#include<iostream>
#include<cstdio>
#include<string.h>
#include<vector>
using namespace std;
vector<int>ps[105];
int linker[305];
int used[305];
int n,p;
void init(int p){
for(int i =0;i<=p;++i){
ps[i].clear();
}
}
bool dfs(int u){
for(int i =0;i<ps[u].size();++i){
int to = ps[u][i];
if(!used[to]){
used[to] = 1;
if(linker[to]==-1||dfs(linker[to])){
linker[to] = u;
return true;
}
}
}
return false;
}
int hungry(){
memset(linker,-1,sizeof(linker));
int res = 0;
for(int i =1;i<=p;++i){
memset(used,0,sizeof(used));
if(dfs(i)){
res++;
}
}
return res;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&p,&n);
init(p);
for(int i =0;i<p;++i){
int num;
scanf("%d",&num);
while(num--){
int stu = 0;
scanf("%d",&stu);
ps[i+1].push_back(stu);
}
}
if(hungry()>=p)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}