#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
struct Edge {
  int to, nxt;
} E[2000000];
int head[2000000], cnt;
void add(int x, int y) {
  E[++cnt].to = y;
  E[cnt].nxt = head[x];
  head[x] = cnt;
}
int dfn[2000000], low[2000000], col[2000000], colnum = 0, tm = 0;
int sta[2000000], top = 0;
int du[2000000];
int a[1000001], b[1000001];
int vis[1000001];
vector<int> v[1000001];
void tarjan(int x) {
  dfn[x] = low[x] = ++tm;
  sta[++top] = x;
  vis[x] = 1;
  for (int i = head[x]; i; i = E[i].nxt) {
    int to = E[i].to;
    if (!dfn[to]) {
      tarjan(to);
      low[x] = min(low[x], low[to]);
    } else if (vis[to])
      low[x] = min(low[x], dfn[to]);
  }
  if (low[x] == dfn[x]) {
    colnum++;
    v[colnum].clear();
    v[colnum].push_back(x);
    col[x] = colnum;
    vis[x] = 0;
    while (sta[top] != x) {
      v[colnum].push_back(sta[top]);
      col[sta[top]] = colnum;
      vis[sta[top]] = 0;
      top--;
    }
    top--;
  }
}
int main(void) {
  int t;
  scanf("%d", &t);
  while (t--) {
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 0; i <= n; i++) {
      head[i] = 0;
      dfn[i] = 0;
      low[i] = 0;
      a[i] = b[i] = 0;
      col[i] = 0;
    }
    tm = colnum = cnt = 0;
    for (int i = 1, x, y; i <= m; i++) {
      scanf("%d%d", &x, &y);
      if (x == y) continue;
      add(x, y);
    }
    for (int i = 1; i <= n; i++) {
      if (!dfn[i]) {
        tarjan(i);
      }
    }
    if (colnum == 1) {
      printf("No\n");
      continue;
    }
    printf("Yes\n");
    for (int i = 1; i <= n; i++)
      for (int j = head[i]; j; j = E[j].nxt) {
        int to = E[j].to;
        if (col[to] == col[i]) continue;
        du[col[i]]++;
      }
    bool flag = false;
    for (int i = 1; i <= colnum; i++) {
      if (!flag && du[i] == 0) {
        flag = true;
        for (int k = 0; k < v[i].size(); k++) a[++a[0]] = v[i][k];
      } else {
        for (int k = 0; k < v[i].size(); k++) b[++b[0]] = v[i][k];
      }
    }
    printf("%d %d\n", a[0], b[0]);
    for (int i = 1; i <= a[0]; i++) printf("%d ", a[i]);
    printf("\n");
    for (int i = 1; i <= b[0]; i++) printf("%d ", b[i]);
    printf("\n");
  }
  return 0;
}
