#include <bits/stdc++.h>
using namespace std;
template <typename U, typename V>
void Min(U &a, const V &b) {
  if (a > b) a = b;
}
template <typename U, typename V>
void Max(U &a, const V &b) {
  if (a < b) a = b;
}
template <typename U, typename V>
void add(U &a, const V &b) {
  a = (a + b) % 1000000007;
}
template <typename U>
U gcd(U a, U b) {
  if (a == 0) return b;
  if (b == 0) return a;
  if (a >= b)
    return gcd(a % b, b);
  else
    return gcd(a, b % a);
}
int pow(int a, int b) {
  int ans = 1;
  while (b) {
    if (b & 1) ans = 1LL * ans * a % 1000000007;
    a = 1LL * a * a % 1000000007;
    b >>= 1;
  }
  return ans;
}
int pow(int a, long long b, int c) {
  int ans = 1;
  while (b) {
    if (b & 1) ans = 1LL * ans * a % c;
    a = 1LL * a * a % c;
    b >>= 1;
  }
  return ans;
}
vector<int> g[200005];
int a[200005], ans[200005];
int main() {
  int T, n, m, i, j, k;
  scanf("%d", &T);
  while (T--) {
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i++) g[i].clear(), a[i] = 0;
    for (int i = 0; i < m; i++) {
      scanf("%d%d", &j, &k);
      j--, k--;
      g[k].push_back(j);
    }
    int sz = 0;
    for (int i = 0; i < n; i++) {
      for (auto &j : g[i]) {
        if (a[j] == 0) Max(a[i], 1);
        if (a[j] == 1) Max(a[i], 2);
      }
      if (a[i] == 2) ans[sz++] = i;
    }
    printf("%d\n", sz);
    for (int i = 0; i < sz; i++) printf("%d ", ans[i] + 1);
    puts("");
  }
}
