#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define maxn 300010
using namespace std;
inline int read()
{
int x=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x;
}
int a[maxn],b[maxn],cnt[maxn],ans;
map<pii,bool>mp;
vector<int>v[maxn],p1;
inline bool check(int x,int y)
{
if(x!=y&&!mp.count({x,y})&&!mp.count({y,x}))
{ans=max(ans,(cnt[x]+cnt[y])*(b[x]+b[y]));return 1;}
return 0;
}
signed main()
{
int t;
cin>>t;
while(t--)
{
ans=0;
mp.clear(); p1.clear();
int n,m;
n=read(); m=read();
for(int i=1;i<=n;++i)
{
b[i]=a[i]=read(),cnt[i]=0;
v[i].clear();
}
sort(b+1,b+1+n);
int num=unique(b+1,b+1+n)-b-1;
int sq=sqrt(num);
for(int i=1;i<=n;++i)
a[i]=lower_bound(b+1,b+1+num,a[i])-b,cnt[a[i]]++;
for(int i=1;i<=m;++i)
{
int u,v;
u=read(); v=read();
u=lower_bound(b+1,b+1+n,u)-b;
v=lower_bound(b+1,b+1+n,v)-b;
mp[{u,v}]=1;
}
for(int i=1;i<=num;++i)
{
if(cnt[i]>sq)p1.push_back(i);
else v[cnt[i]].push_back(i);
}
for(int i=1;i<=sq;++i)sort(v[i].begin(),v[i].end(),greater<int>());
for(auto x:p1)
for(auto y:p1)check(x,y);
for(int i=1;i<=sq;++i)
for(int j=sq;j>=i;--j)
for(auto x:v[i])
for(auto y:v[j])
if(check(x,y))break;
for(auto x:p1)
for(int i=sq;i>=1;--i)
for(auto y:v[i])
if(check(x,y))break;
printf("%lld\n",ans);
}
return 0;
}