#include<bits/stdc++.h>
int dfn[1005],low[1005],dfc,i,SCC[1005];
bool inStack[1005],vis[1005][1005];
std::stack<int> st;
std::vector<std::vector<int> > scc;
std::vector<int> g[1005],DAG[1005];
void tarjan(int u){
dfn[u] = low[u] = ++dfc;
inStack[u] = 1;st.push(u);
for (int v : g[u]){
if (!dfn[v]){
tarjan(v);
low[u] = std::min(low[u],low[v]);
}
else if (inStack[v]) low[u] = std::min(low[u],dfn[v]);
}
if (low[u] == dfn[u]){
int x;scc.push_back({});
do{
x = st.top();st.pop();
inStack[x] = 0;
SCC[x] = scc.size();
scc.back().push_back(x);
}while (x != u);
}
}
void dfs(int u){
for (int v : DAG[u])
if (!vis[i][v]){
vis[i][v] = 1;dfs(v);
}
}
int main(){
std::cin.tie(0)->sync_with_stdio(0);
int T;
for (std::cin >> T;T--;){
int n,m;std::cin >> n >> m;
while (!st.empty()) st.pop();
dfc = 0;scc.clear();
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
memset(SCC,0,sizeof(SCC));
memset(inStack,0,sizeof(inStack));
for (int i = 1;i <= n;i++) g[i].clear();
for (int i = 1;i <= m;i++){
int u,v;std::cin >> u >> v;
g[u].push_back(v);
}
for (int i = 1;i <= n;i++)
if (!dfn[i]) tarjan(i);
for (int i = 1;i <= scc.size();i++) DAG[i].clear();
for (int u = 1;u <= n;u++)
for (int v : g[u])
if (SCC[u] != SCC[v] && std::find(DAG[SCC[u]].begin(),DAG[SCC[u]].end(),SCC[v]) == DAG[SCC[u]].end())
DAG[SCC[u]].push_back(SCC[v]);
for (i = 1;i <= scc.size();i++){
vis[i][i] = 1;dfs(i);
}
for (int i = 1;i <= scc.size();i++)
for (int j = 1;j <= scc.size();j++)
if (!vis[i][j] && !vis[j][i]) goto nxt;
std::cout << "Yes\n";continue;
nxt:std::cout << "No\n";
}
return 0;
}