#include <bits/stdc++.h>
using namespace std;
int t, n, m, a, b, mark[(int)1e6 + 1], marked = 0;
vector<int> adj[2][(int)1e6 + 1];
void dfs(int, bool, bool);
string black_nokhod;
bool debug = false;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> t;
  for (; t > 0; t--) {
    cin >> n >> m;
    marked = 0;
    for (int i = 1; i <= n; i++) {
      adj[0][i].clear();
      adj[1][i].clear();
      mark[i] = -1;
    }
    for (int i = 1; i <= m; i++) {
      cin >> a >> b;
      adj[0][a].push_back(b);
      adj[1][b].push_back(a);
    }
    mark[1] = 0;
    marked = 1;
    dfs(1, 0, 0);
    if (debug) {
      cout << "mark: ";
      for (int i = 1; i <= n; i++) cout << mark[i] << " ";
      cout << "\n";
    }
    if (debug) {
      cout << "marked: " << marked << "\n";
    }
    if (marked < n) {
      cout << "Yes\n" << marked << " " << n - marked << "\n";
      for (int j = 1; j <= n; j++) {
        if (mark[j] == 0) {
          cout << j << " ";
        }
      }
      cout << "\n";
      for (int p = 1; p <= n; p++) {
        if (mark[p] == -1) {
          cout << p << " ";
        }
      }
      cout << "\n";
    } else {
      for (int i = 1; i <= n; i++) {
        mark[i] = -1;
      }
      mark[1] = 1;
      marked = 1;
      dfs(1, 1, 1);
      if (debug) {
        cout << "mark: ";
        for (int i = 1; i <= n; i++) cout << mark[i] << " ";
        cout << "\n";
      }
      if (debug) {
        cout << "marked: " << marked << "\n";
      }
      if (marked < n) {
        cout << "Yes\n" << n - marked << " " << marked << "\n";
        for (int p = 1; p <= n; p++) {
          if (mark[p] == -1) {
            cout << p << " ";
          }
        }
        cout << "\n";
        for (int j = 1; j <= n; j++) {
          if (mark[j] == 1) {
            cout << j << " ";
          }
        }
        cout << "\n";
      } else {
        cout << "No"
             << "\n";
      }
    }
  }
  return 0;
}
void dfs(int v, bool t, bool s) {
  int u;
  for (int i = 0; i < adj[t][v].size(); i++) {
    u = adj[t][v][i];
    if (mark[u] == -1 and t == s) {
      if (debug) {
        cout << "mark changed: " << t << " " << v << " " << u << "\n";
      }
      mark[u] = s;
      marked++;
      dfs(u, t, s);
    }
  }
}
