// UUID: eb4f48ff-ca9f-4a3b-913e-f477f1fd5ba6
#include <bits/stdc++.h>
using namespace std;
bool ans = 1;
vector<vector<pair<int, int> > > t;
vector<vector<int> > va, vb;
vector<int> p, s;
vector<bool> go;
void upd(int v, int l, int r, int tl, int tr, pair<int, int> val)
{
	if(tl > tr) return;
	if(tl == l && tr == r)
	{
		t[v].push_back(val);
		return;
	}
	int m = (l + r) / 2;
	upd(v * 2, l, m, tl, min(tr, m), val);
	upd(v * 2 + 1, m + 1, r, max(tl, m + 1), tr, val);
}
vector<int> op;
void rollback()
{
	int x = op.back();
	op.pop_back();
	p[x] = 0;
}
int get(int v)
{
	return p[v] == 0 ? v : p[v] = get(p[v]);
}
void unio(int a, int b)
{
	a = get(a);
	b = get(b);
	if(a != b)
	{
		if(s[a] < s[b]) swap(a, b);
		p[b] = a;
		s[a] += s[b];	
	}
	op.push_back(b);
}
void dfs(int v, int l, int r)
{
	//cout << v << endl;
	for(auto [x, y] : t[v])
	{
		//cout << x << " " << y << endl;
		unio(x, y);
	}
	if(l == r)
	{
		for(auto x : va[l])
		{
			go[get(x)] = 1;
		}
		for(auto x : vb[l])
		{
			if(!go[get(x)]) ans = 0;
		}
		for(auto x : va[l])
		{
			go[get(x)] = 0;
		}
		for(auto x : t[v])
		{
			rollback();
		}
		return;
	}
	int m = (l + r) / 2;
	dfs(v * 2, l, m);
	dfs(v * 2 + 1, m + 1, r);
	for(auto x : t[v])
	{
		rollback();
	}
}
void solve()
{
	ans = 1;
	int n, m;
	cin >> n >> m;
	t.assign(4 * n, {});
	va.assign(n + 1, {});
	vb.assign(n + 1, {});
	p.assign(n + 1, 0);
	s.assign(n + 1, 1);
	go.assign(n + 1, 0);
	vector<int> a(n + 1), b(n + 1);
	for(int i = 1; i <= n; i++) cin >> a[i];
	for(int i = 1; i <= n; i++) cin >> b[i];
	for(int i = 1; i <= n; i++)
	{
		va[a[i]].push_back(i);
		vb[b[i]].push_back(i);
	}
	for(int i = 0; i < m; i++)
	{
		int x, y;
		cin >> x >> y;
		upd(1, 1, n, max(b[x], b[y]), min(a[x], a[y]), {x, y});
	}
	dfs(1, 1, n);
	cout << ans << "\n";
}
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int te;
	cin >> te;
	while(te--) solve();
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |