#include <bits/stdc++.h>
using namespace std;
#define int int64_t
void solve() {
int N, M;
cin >> N >> M;
vector<int> A(N);
for(int i = 0; i < N; i++) {
cin >> A[i];
}
vector<vector<int>> g(N);
vector<vector<int>> dp(N);
for(int i = 0; i < M; i++) {
int u, v;
cin >> u >> v;
u--, v--;
if(A[u] > A[v]) {
swap(u, v);
} else if(A[u] == A[v]) {
continue;
}
g[u].push_back(v);
}
vector<int> p(N);
iota(begin(p), end(p), 0);
sort(begin(p), end(p), [&](int a, int b){return A[a] > A[b];});
int ans = 1;
for(auto u: p) {
sort(begin(g[u]), end(g[u]), [&](int a, int b){return A[a] > A[b];});
int cur = 2;
for(auto v: g[u]) {
auto it = lower_bound(begin(g[v]), end(g[v]), 2 * A[v] - A[u],
[&](int w, int c){
return A[w] > c;
});
if(it != begin(g[v])) {
cur = max(cur, 1 + dp[v][it - begin(g[v]) - 1]);
}
ans = max(ans, cur);
dp[u].push_back(cur);
}
}
cout << ans << endl;
}
signed main() {
//freopen("input.txt", "r", stdin);
ios::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while(t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgaW50NjRfdAoKdm9pZCBzb2x2ZSgpIHsKCWludCBOLCBNOwoJY2luID4+IE4gPj4gTTsKCXZlY3RvcjxpbnQ+IEEoTik7Cglmb3IoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CgkJY2luID4+IEFbaV07Cgl9Cgl2ZWN0b3I8dmVjdG9yPGludD4+IGcoTik7Cgl2ZWN0b3I8dmVjdG9yPGludD4+IGRwKE4pOwoJZm9yKGludCBpID0gMDsgaSA8IE07IGkrKykgewoJCWludCB1LCB2OwoJCWNpbiA+PiB1ID4+IHY7CgkJdS0tLCB2LS07CgkJaWYoQVt1XSA+IEFbdl0pIHsKCQkJc3dhcCh1LCB2KTsKCQl9IGVsc2UgaWYoQVt1XSA9PSBBW3ZdKSB7CgkJCWNvbnRpbnVlOwoJCX0KCQlnW3VdLnB1c2hfYmFjayh2KTsKCX0KCXZlY3RvcjxpbnQ+IHAoTik7Cglpb3RhKGJlZ2luKHApLCBlbmQocCksIDApOwoJc29ydChiZWdpbihwKSwgZW5kKHApLCBbJl0oaW50IGEsIGludCBiKXtyZXR1cm4gQVthXSA+IEFbYl07fSk7CglpbnQgYW5zID0gMTsKCWZvcihhdXRvIHU6IHApIHsKCQlzb3J0KGJlZ2luKGdbdV0pLCBlbmQoZ1t1XSksIFsmXShpbnQgYSwgaW50IGIpe3JldHVybiBBW2FdID4gQVtiXTt9KTsKCQlpbnQgY3VyID0gMjsKCQlmb3IoYXV0byB2OiBnW3VdKSB7CgkJCWF1dG8gaXQgPSBsb3dlcl9ib3VuZChiZWdpbihnW3ZdKSwgZW5kKGdbdl0pLCAyICogQVt2XSAtIEFbdV0sIAoJCQkJWyZdKGludCB3LCBpbnQgYyl7CgkJCQkJcmV0dXJuIEFbd10gPiBjOwoJCQkJfSk7CgkJCWlmKGl0ICE9IGJlZ2luKGdbdl0pKSB7CgkJCQljdXIgPSBtYXgoY3VyLCAxICsgZHBbdl1baXQgLSBiZWdpbihnW3ZdKSAtIDFdKTsKCQkJfQoJCQlhbnMgPSBtYXgoYW5zLCBjdXIpOwoJCQlkcFt1XS5wdXNoX2JhY2soY3VyKTsKCQl9Cgl9Cgljb3V0IDw8IGFucyA8PCBlbmRsOwp9CgpzaWduZWQgbWFpbigpIHsKCS8vZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKCWNpbi50aWUoMCk7CglpbnQgdDsKCWNpbiA+PiB0OwoJd2hpbGUodC0tKSB7CgkJc29sdmUoKTsKCX0KCXJldHVybiAwOwp9