#include <bits/stdc++.h>
using namespace std;
vector<int> scc_graph_adj[1000000 + 9], scc_graph_rev_adj[1000000 + 9];
vector<int> scc_graph_final_adj[1000000 + 9],
    scc_graph_final_rev_adj[1000000 + 9];
int scc_visited_first[1000000 + 9], scc_visited_second[1000000 + 9];
vector<int> scc_dfs_first_nodes, scc_graph_leaves, scc_graph_roots;
void scc_init(int n) {
  for (int i = 0; i < n + 5; i++) {
    scc_graph_adj[i].clear();
    scc_graph_rev_adj[i].clear();
    scc_graph_final_adj[i].clear();
    scc_graph_final_rev_adj[i].clear();
    scc_visited_first[i] = 0;
    scc_visited_second[i] = 0;
  }
  scc_dfs_first_nodes.clear();
  scc_graph_leaves.clear();
  scc_graph_roots.clear();
}
inline void scc_add_uni_edge(int u, int v) {
  scc_graph_adj[u].push_back(v);
  scc_graph_rev_adj[v].push_back(u);
}
void dfs_first(int x) {
  scc_visited_first[x] = 1;
  for (int u = 0; u < scc_graph_adj[x].size(); u++) {
    if (!scc_visited_first[scc_graph_adj[x][u]]) {
      dfs_first(scc_graph_adj[x][u]);
    }
  }
  scc_dfs_first_nodes.push_back(x);
}
void dfs_second(int x, int c) {
  scc_visited_second[x] = c;
  for (int u = 0; u < scc_graph_rev_adj[x].size(); u++) {
    if (!scc_visited_second[scc_graph_rev_adj[x][u]]) {
      dfs_second(scc_graph_rev_adj[x][u], c);
    }
  }
}
void scc_run_all(int n) {
  int i, j, c;
  for (i = 1; i <= n; i++)
    if (!scc_visited_first[i]) dfs_first(i);
  c = 0;
  for (i = scc_dfs_first_nodes.size() - 1; i >= 0; i--) {
    if (!scc_visited_second[scc_dfs_first_nodes[i]])
      dfs_second(scc_dfs_first_nodes[i], ++c);
  }
  for (i = 1; i <= n; i++) {
    for (j = 0; j < scc_graph_adj[i].size(); j++) {
      if (scc_visited_second[i] != scc_visited_second[scc_graph_adj[i][j]]) {
        scc_graph_final_adj[scc_visited_second[i]].push_back(
            scc_visited_second[scc_graph_adj[i][j]]);
        scc_graph_final_rev_adj[scc_visited_second[scc_graph_adj[i][j]]]
            .push_back(scc_visited_second[i]);
      }
    }
  }
  for (i = 1; i <= c; i++)
    if (scc_graph_final_adj[i].size() == 0) scc_graph_leaves.push_back(i);
  for (i = 1; i <= c; i++)
    if (scc_graph_final_rev_adj[i].size() == 0) scc_graph_roots.push_back(i);
}
int main() {
  int testCase;
  scanf("%d", &testCase);
  while (testCase--) {
    int n, m, i, j, c, a, b, ans;
    scanf("%d %d", &n, &m);
    scc_init(n);
    for (i = 0; i < m; i++) {
      scanf("%d %d", &a, &b);
      scc_add_uni_edge(a, b);
    }
    scc_run_all(n);
    ans = 0;
    for (i = 1; i <= n && ans == 0; i++) {
      if (!scc_graph_final_adj[scc_visited_second[i]].size()) {
        a = 0;
        b = 0;
        for (j = 1; j <= n; j++) {
          if (scc_visited_second[i] == scc_visited_second[j])
            a++;
          else
            b++;
        }
        if (a && b) {
          ans = 1;
          cout << "Yes\n";
          cout << a << " " << b << endl;
          for (j = 1; j <= n; j++)
            if (scc_visited_second[i] == scc_visited_second[j])
              cout << j << " ";
          cout << endl;
          for (j = 1; j <= n; j++)
            if (scc_visited_second[i] != scc_visited_second[j])
              cout << j << " ";
          cout << endl;
        } else
          break;
      }
    }
    if (ans == 0) cout << "No\n";
  }
}
