#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 2e5 + 5;
int banhhe[maxn], sz[maxn], p[maxn], ok;
vector<pair<int, int>> st[4 * maxn];
vector<int> has[maxn], req[maxn];
vector<array<int, 3>> hist;
int find(int u){
while(u != p[u]) u = p[u];
return u;
}
void merge(int u, int v){
u = find(u); v = find(v);
if(u == v){
hist.push_back({-1, -1, -1});
return;
}
if(sz[u] < sz[v]) swap(u, v);
hist.push_back({u, v, sz[u]});
sz[u] += sz[v];
p[v] = u;
}
void add(int id, int l, int r, int u, int v, int x, int y){
if(v < l || r < u) return;
if(u <= l && r <= v){
st[id].push_back({x, y});
return;
}
int mid = (l + r) / 2;
add(id * 2, l, mid, u, v, x, y);
add(id * 2 + 1, mid + 1, r, u, v, x, y);
}
void dfs(int id, int l, int r){
for(auto [u, v]: st[id]) merge(u, v);
if(l == r){
for(int x: has[l]) banhhe[find(x)] = 1;
for(int x: req[l]) ok &= (banhhe[find(x)]);
for(int x: has[l]) banhhe[find(x)] = 0;
}else{
int mid = (l + r) / 2;
dfs(2 * id, l, mid);
dfs(2 * id + 1, mid + 1, r);
}
for(int i = 0; i < st[id].size(); i++){
auto [u, v, x] = hist.back();
hist.pop_back();
if(x != -1) sz[u] = x, p[v] = v;
}
}
void solve(){
int n, m; cin >> n >> m;
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];
ok = 1;
for(int i = 1; i <= n; i++) ok &= (a[i] >= b[i]);
for(int i = 1; i <= n; i++){
has[a[i]].push_back(i);
req[b[i]].push_back(i);
}
for(int i = 1; i <= m; i++){
int u, v; cin >> u >> v;
int l = max(b[u], b[v]), r = min(a[u], a[v]);
if(l <= r) add(1, 1, n, l, r, u, v);
}
dfs(1, 1, n);
cout << ok << "\n";
for(int i = 1; i <= n; i++){
has[i].clear();
req[i].clear();
sz[i] = 1;
p[i] = i;
}
for(int i = 1; i <= 4 * n; i++) st[i].clear();
hist.clear();
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--) solve();
}