#include <bits/stdc++.h>   using namespace std;   void input(vector<long long>& v, long n) {     for (long long i = 0; i < n; i++) {       long long in;       cin >> in;       v.push_back(in);     }   }   void output(vector<long long> v) {     for (long long i = 0; i < v.size(); i++) cout << v[i] <<    ;   }   long long max_of_three(long long a, long long b, long long c) {     if (a >= b && a >= c)       return a;     else if (b >= a && b >= c)       return b;     else       return c;   }   long long max_of_4(long long a, long long b, long long c, long long d) {     if (a >= b && a >= c && a >= d)       return a;     else if (b >= a && b >= c && b >= d)       return b;     else if (c >= a && c >= d && c >= b)       return c;     else       return d;   }   map<long long, long long> frequency(vector<long long> v) {     map<long long, long long> m;     for (long long i = 0; i < v.size(); i++) {       if (m.find(v[i]) != m.end())         m[v[i]]++;       else {         m.insert({v[i], 1});       }     }     return m;   }   long long max_occuring_int(std::map<long long, long long> m) {     long long max_x = 0;     long long i = 0, n = m.size();     std::map<long long, long long>::iterator it = m.begin();     for (i = 0; i < n; i++) {       if (it->second > max_x) max_x = it->second;       it++;     }     return max_x;   }   vector<long long> give_unique_in_vector(vector<long long> v) {     sort((v).begin(), (v).end());     auto it = unique((v).begin(), (v).end());     v.resize(std::distance(v.begin(), it));     vector<long long> x = v;     return x;   }   bool isVowel(char c) {     return (c ==  a  | c ==  e  || c ==  i  || c ==  o  || c ==  u  || c ==  y  ||             c ==  A  || c ==  E  || c ==  I  || c ==  O  || c ==  U  || c ==  Y );   }   string removeWord(string str, string word) {     if (str.find(word) != string::npos) {       size_t p = -1;       string tempWord = word +    ;       while ((p = str.find(word)) != string::npos)         str.replace(p, tempWord.length(),   );       tempWord =     + word;       while ((p = str.find(word)) != string::npos)         str.replace(p, tempWord.length(),   );     }     return str;   }   long long calc(long long i, long long j, long long n) {     return (i + 1 - 1) * n + j + 1;   }   bool compare_descending(long long a, long long b) { return a > b; }   void solve() {     long long n, k;     cin >> n >> k;     vector<long long> v;     input(v, n);     long long max_change_of_min = *min_element((v).begin(), (v).end()) + k;     long long price = max_change_of_min;     for (long long i = 0; i < (long long)(n); ++i) {       long long low = v[i] - k;       long long high = v[i] + k;       if (low <= 0) low = 1;       if (price >= low && price <= high) {       } else {         cout <<  -1 n ;         return;       }     }     cout << price << endl;     ;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     long long test;     cin >> test;     while (test--) solve();     return 0;   }   