#include<bits/stdc++.h>
using namespace std;
class Graph
{
int V;
list<int> *adj;
public :
Graph(int V);
void addEdge(int v,int w);
bool isCyclic();
};
vector<int> g[100001];
Graph::Graph(int V)
{
this->V = V;
adj = new list<int>[V];
}
void Graph::addEdge(int v,int w)
{
adj[v].push_back(w);
adj[w].push_back(v);
}
int main()
{
int T;
cin>>T;
while(T--)
{
int _size,N;
cin>>_size>>N;
Graph *g = new Graph(_size);
for(int i=0;i<N;i++)
{
int u,v;
cin>>u>>v;
g->addEdge(u,v);
}
cout<<g->isCyclic()<<endl;
}
}
bool isutil(list<int>*adj, int i, bool vis[],int V)
{
int parent[V];
memset(parent,-1,sizeof(parent));
queue<int>q;
q.push(i);
vis[i] = true;
while(!q.empty())
{
int x = q.front();
q.pop();
for(auto u:adj[x])
{
if(!vis[u])
{
vis[u] = true;
q.push(u);
parent[u]=x;
}
else if(parent[x]!=u)
return true;
}
}
return false;
}
bool Graph :: isCyclic()
{
bool *vis = new bool[V];
for(int i=0;i<V;i++)
vis[i]=false;
for(int i=0;i<V;i++)
{
if(!vis[i] && isutil(adj,i,vis,V))
return true;
}
return false;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2xhc3MgR3JhcGgKewogICAgaW50IFY7CiAgICBsaXN0PGludD4gKmFkajsKcHVibGljIDoKICAgIEdyYXBoKGludCBWKTsKICAgIHZvaWQgYWRkRWRnZShpbnQgdixpbnQgdyk7CiAgICBib29sIGlzQ3ljbGljKCk7Cn07CnZlY3RvcjxpbnQ+IGdbMTAwMDAxXTsKR3JhcGg6OkdyYXBoKGludCBWKQp7CiAgICB0aGlzLT5WID0gVjsKICAgIGFkaiA9IG5ldyBsaXN0PGludD5bVl07Cn0Kdm9pZCBHcmFwaDo6YWRkRWRnZShpbnQgdixpbnQgdykKewogICAgYWRqW3ZdLnB1c2hfYmFjayh3KTsKICAgIGFkalt3XS5wdXNoX2JhY2sodik7Cn0KaW50IG1haW4oKQp7CiAgICBpbnQgVDsKICAgIGNpbj4+VDsKICAgIHdoaWxlKFQtLSkKICAgIHsKICAgICAgICBpbnQgX3NpemUsTjsKICAgICAgICBjaW4+Pl9zaXplPj5OOwogICAgICAgIEdyYXBoICpnID0gbmV3IEdyYXBoKF9zaXplKTsKICAgICAgICBmb3IoaW50IGk9MDtpPE47aSsrKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHUsdjsKICAgICAgICAgICAgY2luPj51Pj52OwogICAgICAgICAgICBnLT5hZGRFZGdlKHUsdik7CiAgICAgICAgfQogICAgICAgIGNvdXQ8PGctPmlzQ3ljbGljKCk8PGVuZGw7CiAgICB9Cn0KCmJvb2wgaXN1dGlsKGxpc3Q8aW50PiphZGosIGludCBpLCBib29sIHZpc1tdLGludCBWKQp7CiAgICBpbnQgcGFyZW50W1ZdOwogICAgbWVtc2V0KHBhcmVudCwtMSxzaXplb2YocGFyZW50KSk7CiAgICBxdWV1ZTxpbnQ+cTsKICAgIHEucHVzaChpKTsKICAgIHZpc1tpXSA9IHRydWU7CiAgICB3aGlsZSghcS5lbXB0eSgpKQogICAgewogICAgICAgIGludCB4ID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgZm9yKGF1dG8gdTphZGpbeF0pCiAgICAgICAgewogICAgICAgICAgICBpZighdmlzW3VdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2aXNbdV0gPSB0cnVlOwogICAgICAgICAgICAgICAgcS5wdXNoKHUpOwogICAgICAgICAgICAgICAgcGFyZW50W3VdPXg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZihwYXJlbnRbeF0hPXUpCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmJvb2wgR3JhcGggOjogaXNDeWNsaWMoKQp7CiAgICBib29sICp2aXMgPSBuZXcgYm9vbFtWXTsKICAgIGZvcihpbnQgaT0wO2k8VjtpKyspCiAgICAgICAgdmlzW2ldPWZhbHNlOwogICAgZm9yKGludCBpPTA7aTxWO2krKykKICAgIHsKICAgICAgICBpZighdmlzW2ldICYmIGlzdXRpbChhZGosaSx2aXMsVikpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9