#include <bits/stdc++.h>
using namespace std;
 
const int MAXN = 2e5 + 5;
int a[MAXN];
int A0[MAXN];
int A1[MAXN];
int AD_[MAXN];
 
void solve() {
    int n, q;
    if (!(cin >> n >> q)) return;
 
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }
 
    A0[0] = 0;
    A1[0] = 0;
    AD_[0] = 0;
 
    for (int i = 0; i < n; ++i) {
        A0[i + 1] = A0[i] + (a[i] == 0);
        A1[i + 1] = A1[i] + (a[i] == 1);
    }
 
    for (int i = 0; i < n - 1; ++i) {
        AD_[i + 1] = AD_[i] + (a[i] == a[i + 1]);
    }
 
    for (int k = 0; k < q; ++k) {
        int l, r;
        if (!(cin >> l >> r)) return;
 
        int count0 = A0[r] - A0[l - 1];
        int count1 = A1[r] - A1[l - 1];
 
        int total_cost = -1;
 
        if (count0 % 3 == 0 && count1 % 3 == 0) {
            int total_ops = (int)(count0 / 3) + (int)(count1 / 3);
 
            total_cost = total_ops;
 
            if (count0 == count1) {
 
                int adjacent_equal_count = AD_[r - 1] - AD_[l - 1];
 
                if (adjacent_equal_count == 0) {
                    total_cost += 1;
                }
            }
        }
 
        cout << total_cost << "\n";
    }
}
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
 
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
 
    return 0;
}
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDJlNSArIDU7CmludCBhW01BWE5dOwppbnQgQTBbTUFYTl07CmludCBBMVtNQVhOXTsKaW50IEFEX1tNQVhOXTsKCnZvaWQgc29sdmUoKSB7CiAgICBpbnQgbiwgcTsKICAgIGlmICghKGNpbiA+PiBuID4+IHEpKSByZXR1cm47CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgIH0KCiAgICBBMFswXSA9IDA7CiAgICBBMVswXSA9IDA7CiAgICBBRF9bMF0gPSAwOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgQTBbaSArIDFdID0gQTBbaV0gKyAoYVtpXSA9PSAwKTsKICAgICAgICBBMVtpICsgMV0gPSBBMVtpXSArIChhW2ldID09IDEpOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbiAtIDE7ICsraSkgewogICAgICAgIEFEX1tpICsgMV0gPSBBRF9baV0gKyAoYVtpXSA9PSBhW2kgKyAxXSk7CiAgICB9CgogICAgZm9yIChpbnQgayA9IDA7IGsgPCBxOyArK2spIHsKICAgICAgICBpbnQgbCwgcjsKICAgICAgICBpZiAoIShjaW4gPj4gbCA+PiByKSkgcmV0dXJuOwoKICAgICAgICBpbnQgY291bnQwID0gQTBbcl0gLSBBMFtsIC0gMV07CiAgICAgICAgaW50IGNvdW50MSA9IEExW3JdIC0gQTFbbCAtIDFdOwoKICAgICAgICBpbnQgdG90YWxfY29zdCA9IC0xOwoKICAgICAgICBpZiAoY291bnQwICUgMyA9PSAwICYmIGNvdW50MSAlIDMgPT0gMCkgewogICAgICAgICAgICBpbnQgdG90YWxfb3BzID0gKGludCkoY291bnQwIC8gMykgKyAoaW50KShjb3VudDEgLyAzKTsKCiAgICAgICAgICAgIHRvdGFsX2Nvc3QgPSB0b3RhbF9vcHM7CgogICAgICAgICAgICBpZiAoY291bnQwID09IGNvdW50MSkgewoKICAgICAgICAgICAgICAgIGludCBhZGphY2VudF9lcXVhbF9jb3VudCA9IEFEX1tyIC0gMV0gLSBBRF9bbCAtIDFdOwoKICAgICAgICAgICAgICAgIGlmIChhZGphY2VudF9lcXVhbF9jb3VudCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdG90YWxfY29zdCArPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBjb3V0IDw8IHRvdGFsX2Nvc3QgPDwgIlxuIjsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CgogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9