#include <iostream>
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std; int f[1000];
int digree[1000]; int find(int x)
{
while(x!=f[x])
x=find(f[x]);
return x;
} void bing(int a,int b)
{
if(find(a)!=find(b))
f[find(a)]=find(b);
}
//并查集模板,不解释 int main()
{
int i,p,q;
int n,a,b;
scanf("%d",&n);
while(n--)
{
memset(f,0,sizeof(f));
memset(digree,0,sizeof(digree)); //记得要初始化为0 scanf("%d%d",&p,&q);
for(i=1;i<=p;i++)
f[i]=i; // for(i=1;i<=p;i++) cout<<f[i]<<" "; for(i=1;i<=q;i++)
{
scanf("%d%d",&a,&b);
if(a==b) continue; //解决重复
else
{
digree[a]++;
digree[b]++;
}
bing(a,b);
} int jidian=0,cnt=0; for(i=1;i<=p;i++)
{
if(i==f[i]) cnt++;
if(digree[i]&1) jidian++; //判断基点个数
} if(cnt==1 && ( jidian==0 || jidian==2 ) )
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
// nyoj 42
//这一题主要是使用并查集加欧拉回路的概念,总体的思路是判定一个图是否连通,然后用欧拉定理判断基点个数来判断一个图是否能一笔画成。。。