defsolve(): n, m = map(int, input().split()) A = list(map(int, input().split()))
if2 * m > n: print(-1) return
idxs = list(range(n)) idxs.sort(key=lambda idx: A[idx]) ans = [] if m > 0: ans.extend([(idxs[i], idxs[i + 1]) for i inrange(n - 2 * m)]) ans.extend([(idxs[n - m + i], idxs[n - 2 * m + i]) for i inrange(m)]) else: dmg = sum(A) - A[idxs[-1]] if dmg < A[idxs[-1]]: print(-1) return dmg -= A[idxs[-2]] i = 0 while i < n - 2and dmg >= A[idxs[-1]]: u, v = idxs[i], idxs[i + 1] ans.append((u, v)) dmg -= A[u] i += 1 for j inrange(i, n - 1): ans.append((idxs[j], idxs[-1]))
print(len(ans)) for u, v in ans: print(u + 1, v + 1)
defcheck(): res = n hp = A[:] vis = [False] * n for u, v in ans: if vis[u] or hp[u] <= 0: returnFalse vis[u] = True hp[v] -= A[u] if hp[v] <= 0: res -= 1 hp[u] -= A[v] if hp[u] <= 0: res -= 1 return res == m # assert check()
if __name__ == "__main__": t = int(input()) for _ inrange(t): solve()