#include <iostream>
#include <string>
#include <vector>
#include <array>
#include <queue>
#include <deque>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <functional>
#include <cassert>
#include <iomanip>
#define vll vector<ll>
#define vvvl vector<vvl>
#define vvl vector<vector<ll>>
#define VV(a, b, c, d) vector<vector<d>>(a, vector<d>(b, c))
#define VVV(a, b, c, d) vector<vvl>(a, vvl(b, vll (c, d)));
#define re(c, b) for(ll c=0;c<b;c++)
#define all(obj) (obj).begin(), (obj).end()
typedef long long int ll;
typedef long double ld;
using namespace std;

//n=1ならsecond
//n odd 先手はxorを0にしたい
//n even 先手はxor!=0にしたい

void solve(){
  ll n;scanf("%lld", &n);
  vector<ll> a(n);
  re(i, n) scanf("%lld", &a[i]);
  if(n%2==0){
    sort(all(a));
    bool f = true;
    for(int i=0;i<n;i+=2){
      if(a[i]!=a[i+1]){
        f = false;
        break;
      }
    }
    //全要素偶数個
    if(f){
      std::cout << "Second" << '\n';
      return;
    }else{
      std::cout << "First" << '\n';
      return;
    }
  }else{
    std::cout << "Second" << '\n';
    return;
  }
}
int main(){
  ll T;std::cin >> T;
  re(i, T) solve();
}

// dont stop until you reach there 
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
#define int long long 
#define rep(i,j,k) for(int i=j;i<k;i+=1)
#define rrep(i,j,k) for(int i=n-1;i>=0;i-=1)
#define sorti(v) sort(v.begin(),v.end())
#define sortd(v) sort(v.begin(),v.end(),greater<int>())
#define mm map<int,int>
#define vv vector<int>
#define tmm map<int,map<int,int>>
#define trav(a, x) for(auto& a : x)
#define ff first
#define ss second
#define lb lower_bound
#define ub upper_bound
#define all(v) v.begin(),v.end()
#define pb push_back
#define alot(x,y) memset(x,y,sizeof(x))
#define pii pair<int,int>
#define code ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
const int MOD=1e9+7;
const double pi=acos(-1.0);
//memset(array_name,value_to_be_intialized,sizeof(array_name));
// __builtin_popcount(n) count no of set bit in number n
//next_permutation(s.begin(),s.end());
/*int change(string g){
     int p=10;
     int ans=g[g.length()-1]-'0';
     for(int i=g.length()-2;i>=0;i--){
         int j=g[i]-'0';
         ans=p*ans+j;
     }
     return ans;
}
int binpow(int a,int b){
    int res=1;
    while(b>0){
        if(b&1)res*=a;
        a*=a;
        b>>=1;
        
    }
    return res;
}
// lower_bound==> if the element is present it return its first occurence else 1st element which is greater than 
// upper_bound==> it will always return iterator to element which is greater than searched element
*/
int32_t main ()
{
     code;
    int tt;
    //cin>>tt;
    tt=1;
    while(tt--){
        int n,m;
        cin>>n>>m;
        vv a;
        vv b;
        rep(i,0,n){
            int p;
            cin>>p;
            a.pb(p);
            
        }
        rep(i,0,n){
            int p;
            cin>>p;
            b.pb(p);
        }
        int sum1=0,sum2=0;
        set<int>st;
        rep(i,0,m){
            int p,q;
            cin>>p>>q;
            p--;
            q--;
            st.insert(p);
            st.insert(q);
        }
        trav(x,st){
            sum1+=a[x];
            sum2+=b[x];
        }
        if(m==0){
            if(a==b)cout<<"Yes\n";
            else cout<<"No\n";
        }
        else if(sum1==sum2)cout<<"Yes\n";
        else cout<<"No\n";

    }
    return 0;
    
}
