func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   void REV(T *a, int n) {     reverse(a + 1, a + 1 + n);   }   template <class T>   void SRT(T *a, int n) {     sort(a + 1, a + 1 + n);   }   template <class T>   int UNI(T *a, int n) {     sort(a + 1, a + 1 + n);     return unique(a + 1, a + 1 + n) - (a + 1);   }   template <class T>   int POS(T *a, int n, T v) {     return lower_bound(a + 1, a + 1 + n, v) - a;   }   template <class T>   void _R(T &x) {     cin >> x;   }   void _R(int &x) { scanf( %d , &x); }   void _R(long long &x) { scanf( %lld , &x); }   void _R(double &x) { scanf( %lf , &x); }   void _R(char &x) { scanf(  %c , &x); }   void _R(char *x) { scanf( %s , x); }   void R() {}   template <class T, class... U>   void R(T &head, U &...tail) {     _R(head);     R(tail...);   }   template <class T>   void _W(const T &x) {     cout << x;   }   void _W(const int &x) { printf( %d , x); }   void _W(const long long &x) { printf( %lld , x); }   void _W(const double &x) { printf( %.12f , x); }   void _W(const char &x) { putchar(x); }   void _W(const char *x) { printf( %s , x); }   template <class T, class U>   void _W(const pair<T, U> &x) {     _W(x.F);     putchar(   );     _W(x.S);   }   template <class T>   void _W(const vector<T> &x) {     for (auto i = x.begin(); i != x.end(); _W(*i++))       if (i != x.cbegin()) putchar(   );   }   void W() {}   template <class T, class... U>   void W(const T &head, const U &...tail) {     _W(head);     putchar(sizeof...(tail) ?     :   n );     W(tail...);   }   template <typename T>   void cmin(T &x, T y) {     if (y < x) x = y;   }   template <typename T>   void cmax(T &x, T y) {     if (y > x) x = y;   }   long long sum;   int n;   int a[200005];   int cnt[64];   void purin_solve() {     R(sum, n);     memset((cnt), 0, sizeof((cnt)));     long long cursum = 0;     for (int i = (1); i <= (n); ++i) {       long long x;       R(x);       cursum += x;       int c = -1;       while (x) {         ++c;         x >>= 1;       }       ++cnt[c];     }     if (cursum < sum) do {         puts( -1 );         return;       } while (false);     ;     long long SUM = 0;     int ans = 0;     for (int i = 0; i < 64; ++i) {       if (SUM >= (1LL << i)) {         SUM -= (1LL << i);         ++cnt[i];       }       if (sum >> i & 1) {         int j;         for (j = i; j < 64; ++j) {           if (cnt[j]) break;         };         if (j == 64) do {             puts( -1 );             return;           } while (false);         while (j > i) {           --cnt[j];           --j;           cnt[j] += 2;           ++ans;         }         assert(cnt[i]);         --cnt[i];       }       while (cnt[i]) {         SUM += (1LL << i);         --cnt[i];       }     }     W(ans);   }   int main() {     cout << fixed << setprecision(12);     cerr << fixed << setprecision(12);     int t = 1;     scanf( %d , &t);     while (t--) purin_solve();     return 0;   }   