#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define fast \
ios_base::sync_with_stdio(false); \
cin.tie(NULL); \
cout.tie(NULL);
typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;
template <class T>
using oset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <typename T, typename R>
using omap = tree<T, R, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define all(x) x.begin(), x.end()
#define clr(x, val) memset(x, val, sizeof(x))
#define F first
#define S second
#define setpr(x) cout << setprecision(x) << fixed
const int N = 2e5 + 10;
const int mod = 1e9 + 7;
const ll inf = INT_MAX;
const ld pi = acos(-1.0);
#define print(a) \
for (auto x : a) \
cout << x << " "; \
cout << endl
#define print1(a) \
for (auto x : a) \
cout << x.first << " " << x.second << endl;
#define bug(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char *name, Arg1 &&arg1) { cout << name << " : " << arg1 << endl; }
template <typename Arg1, typename... Args>
void __f(const char *names, Arg1 &&arg1, Args &&...args)
{
const char *comma = strchr(names + 1, ',');
cout.write(names, comma - names) << " : " << arg1 << " | ";
__f(comma + 1, args...);
}
vector<vector<ll>> cnt(20);
void pre()
{
for (int k = 1; k < 20; k++)
{
for (int i = 1; i < (1 << k); i++)
{
ll now = 0;
for (int j = 1; j <= k; j++)
{
if (i & (1 << (j - 1)))
{
for (int a = j; a <= k; a += j)
{
now ^= (1 << (a - 1));
}
}
}
if (__builtin_popcount(now) <= k / 5)
{
cnt[k].push_back(i);
}
}
}
}
void solve()
{
int n, m;
cin >> n >> m;
vector<int> jabe(n);
for (int i = 0; i < m; i++)
{
int u, v;
cin >> u >> v;
u--;
v--;
jabe[u] |= (1 << v);
}
if (n >= 20)
{
cout << n << endl;
for (int i = 1; i <= n; i++)
{
cout << i << " ";
}
cout << endl;
return;
}
for (auto it : cnt[n])
{
int flag = 1;
for (int i = 0; i < n; i++)
{
if (it & (1 << i))
{
if ((it & jabe[i]) != jabe[i])
{
flag = 0;
break;
}
}
}
if (flag)
{
vector<int> press;
for (int i = 0; i < n; i++)
{
if (it & (1 << i))
{
press.push_back(i + 1);
}
}
cout << press.size() << endl;
print(press);
return;
}
}
cout << -1 << endl;
}
int main()
{
fast;
// #ifndef ONLINE_JUDGE
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
// #endif
clock_t z = clock();
int t = 1, cs = 0;
pre();
cin >> t;
while (t--)
{
cs++;
// cout << "Case " << cs << ": ";
solve();
}
// cerr << "Run Time : " << ((double)(clock() - z) / CLOCKS_PER_SEC);
return 0;
}