/***************************/
/** Author : thantrongtri3 */
/***************************/
#include <bits/stdc++.h>

using namespace std;

namespace IO{
    void setIn(string s) {freopen(s.c_str(), "r", stdin);}
    void setOut(string s) {freopen(s.c_str(), "w", stdout);}
    void setIO(string s = ""){
        ios_base::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
        #ifndef ONLINE_JUDGE
            cin.exceptions(cin.failbit);
        #endif // ONLINE_JUDGE
        if (s.size()){
            setIn(s+".inp");
            setOut(s+".out");
        } else{
            #ifndef ONLINE_JUDGE
                freopen("input.txt", "r", stdin);
            #endif // ONLINE_JUDGE
        }
    }
}

using namespace IO;

namespace Function{
    template <typename T1, typename T2> bool amax(T1 &a, T2 b){
        if (a < b) {
            a = b;
            return 1;
        }
        return 0;
    }
    template <typename T1, typename T2> bool amin(T1 &a, T2 b){
        if (a > b){
            a = b;
            return 1;
        }
        return 0;
    }
    template <typename T> void compress(T &a){
        sort(a.begin(), a.end());
        a.resize(unique(a.begin(), a.end()) - a.begin());
    }
    template <typename T1, typename T2, typename T3> int position(T1 Begin, T2 End, T3 val, bool type = 0){
        if (type == 0){
            return lower_bound(Begin, End, val) - Begin;
        }
        return upper_bound(Begin, End, val) - Begin;
    }
    template <typename T> long long sqr(T x) {return 1LL * x * x;}
    template <typename T1, typename T2> long long GCD(T1 a, T2 b) {return b == 0 ? a : GCD(b, a % b);}
    template <typename T1, typename T2> long long LCM(T1 a, T2 b) {return 1LL * a / GCD(a, b) * b;}
}

using namespace Function;

namespace Output{
    char End_Of_Stream = '\n';
    void print(int x) {cout << x << End_Of_Stream;}
    void print(unsigned int x) {cout << x << End_Of_Stream;}
    void print(long unsigned int x) {cout << x << End_Of_Stream;}
    void print(long long x) {cout << x << End_Of_Stream;}
    void print(unsigned long long x) {cout << x << End_Of_Stream;}
    void print(float x) {cout << x << End_Of_Stream;}
    void print(double x) {cout << x << End_Of_Stream;}
    void print(long double x) {cout << x << End_Of_Stream;}
    void print(char x) {cout << x << End_Of_Stream;}
    void print(const char* x) {cout << x << End_Of_Stream;}
    void print(string x) {cout << x << End_Of_Stream;}
    void print(bool x) {cout << x << End_Of_Stream;}

    template <typename T1, typename T2> void print(pair <T1, T2> a) {cout << a.first << " " << a.second << End_Of_Stream;}
    template <size_t sz> void print(bitset<sz> a) {
        for(int i = 0; i < sz; i++){
            cout << a[i];
        }
        cout << End_Of_Stream;
    }

    template <typename T> void write(T x) {print(x);}

    template <class T, class... Ts> void write(T t, Ts... ts){
        write(t);
        write(ts...);
    }

    template <class T, class... Ts> void print(T t, Ts... ts){
        End_Of_Stream = ' ';
        write(t, ts...);
        cout << '\n';
        End_Of_Stream = '\n';
    }

    template <typename T> void print(T a){
        for(auto it : a){
            print(it);
        }
    }

    template <class T, class... Ts> void prine(T t, Ts... ts){
        print(t, ts...);
        exit(0);
    }
}

using namespace Output;

typedef pair <long long, int> pii;

const int dx[] = {1, -1, 0, 0};
const int dy[] = {0, 0, 1, -1};
const int INF = 1e9 + 10;
const long long INFL = 1e18;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;

long long sum[N];

int main()
{
    setIO();

    int T;
    cin >> T;
    while (T--){
        int n, m;
        cin >> n >> m;
        long long mx = 0;
        vector<pii> ans;
        for(int i = 1; i <= n; i++){
            int x;
            cin >> x;
            sum[i] = sum[i - 1] + x;
            if (sum[i] > mx){
                mx = sum[i];
                ans.push_back({sum[i], i - 1});
            }
        }

        End_Of_Stream = ' ';

        while (m--){
            long long x;
            cin >> x;
            if (sum[n] <= 0){
                int res = position(ans.begin(), ans.end(), pii(x, -1));
                print(res == ans.size() ? -1 : ans[res].second);
            } else {
                int l = 0;
                int r = INF / sum[n] + 10;
                while (l < r){
                    int mid = (l + r) >> 1;
                    long long S = 1LL * sum[n] * mid;
                    if (S + mx < x){
                        l = mid + 1;
                    } else {
                        r = mid;
                    }
                }
                if (r == INF / sum[n] + 10){
                    print(-1);
                    continue;
                }
                long long S = 1LL * sum[n] * r;
                x -= S;
                if (x <= 0){
                    print(1LL * r * n);
                    continue;
                }
                int res = position(ans.begin(), ans.end(), pii(x, -1));
                print(ans[res].second + 1LL * r * n);
            }
        }

        End_Of_Stream = '\n';
        print("");
    }
    return 0;
}
