#include <bits/stdc++.h>
#define int int64_t
const int inf = 1e18;
const int N = 5001;
struct Dsu{
    std::vector<int> P, siz;
    void make(int n) {
      P.resize(n + 1);
      siz.resize(n + 1);
    }
    void add(int v){
        P[v]=v;
        siz[v]=1;
        return;
    }
    int parent(int x){
        if(x==P[x])return x;
        return P[x]=parent(P[x]);
    }
    void add(int u,int v){
        u=parent(u);
        v=parent(v);
        if(u!=v){
            if(siz[u]<siz[v])std::swap(u,v);
            P[v]=u;
            siz[u]+=siz[v];
        }
        return;
    }
    int same(int u, int v) {
        return parent(u) == parent(v);
    }
};
void solve() {
  int n, m;
  std::cin >> n >> m;
  std::vector<int> a(n + 1);
  for(int i = 1; i <= n; i++) {
    std::cin >> a[i];
  }
  std::vector<int> b(n + 1);
  for(int i = 1; i <= n; i++) {
    std::cin >> b[i];
  }
  std::vector<std::array<int, 2>> edges(m + 1);
  for(int i = 1; i <= m; i++) {
    std::cin >> edges[i][0] >> edges[i][1];
  }
  int ok = 1;
  for(int i = 1; i <= n; i++) {
    ok &= (a[i] >= b[i]);
  }
  if(!ok) {
    std::cout << 0 << "\n";
    return;
  }
  std::vector<std::array<int, 2>> pq;
  for(int i = 1; i <= n; i++) {
    pq.push_back({b[i], i});
  }
  std::sort(pq.begin(), pq.end());
  reverse(pq.begin(), pq.end());
  std::set<int> st[n + 1];
  for(int i = 1; i <= n; i++) {
    st[a[i]].insert(i);
  }
  for(int ix = 0; ix < n; ix++) {
    int i = pq[ix][1];
    if(a[i] == b[i]) {
      continue;
    }
    Dsu dsu;
    dsu.make(n + 1);
    for(int e = 1; e <= n; e++) {
      dsu.add(e);
    }
    for(int e = 1; e <= n; e++) {
      int u = edges[e][0];
      int v = edges[e][1];
      if(b[u] <= b[i] && a[u] >= b[i] && b[v] <= b[i] && a[v] >= b[i]) {
        dsu.add(u, v);
      }
    }
    int can = 0;
    for(auto posible : st[b[i]]) {
      can |= dsu.same(i, posible);
    }
    ok &= can;
    if(!ok) {
      break;
    }
    st[a[i]].erase(i);
    st[b[i]].insert(i);
    a[i] = n;
  }
  std::cout << ok << "\n";
}
signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  int t = 1;
  std::cin >> t;
  while (t--) {
      solve();
  }
  return 0;
}
| # | 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... |