func_code_string: #include <bits/stdc++.h>   using namespace std;   long long mod = 1000000007;   long long mod2 = 998244353;   long long mod3 = 1000003;   long long mod4 = 998244853;   long long inf = 1LL << 60;   long double pi = 3.14159265358979323846L;   double eps = 1e-12;   int dh[4] = {1, -1, 0, 0};   int dw[4] = {0, 0, 1, -1};   int ddh[8] = {-1, -1, -1, 0, 0, 1, 1, 1};   int ddw[8] = {-1, 0, 1, -1, 1, -1, 0, 1};   long long gcd(long long a, long long b) {     if (a < b) swap(a, b);     if (b == 0) return a;     if (a % b == 0) return b;     return gcd(b, a % b);   }   long long Pow(long long n, long long k) {     long long ret = 1;     long long now = n;     while (k > 0) {       if (k & 1) ret *= now;       now *= now;       k /= 2;     }     return ret;   }   long long beki(long long n, long long k, long long md) {     long long ret = 1;     long long now = n;     while (k > 0) {       if (k % 2 == 1) {         ret *= now;         ret %= md;       }       now *= now;       now %= md;       k /= 2;     }     return ret;   }   long long gyaku(long long n, long long md) { return beki(n, md - 2, md); }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     int t;     cin >> t;     for (long long i = 0; i < t; i++) {       long long n, m;       cin >> n >> m;       long long a[m];       long long sum = 0;       unordered_map<long long, long long> mp;       for (long long j = 0; j < m; j++) {         cin >> a[j];         sum += a[j];         mp[a[j]]++;       }       if (sum < n) {         cout << -1 << endl;         continue;       }       unordered_map<long long, bool> ok;       long long nn = n;       for (long long j = 0; j < 60; j++) {         long long now = 1LL << j;         if (nn % 2) {           ok[now] = false;         } else           ok[now] = true;         nn /= 2;       }       long long now = 1;       sum = 0;       set<long long> st;       long long ans = 0;       for (;;) {         sum += mp[now] * now;         if (mp[now] > 0) {           long long u = *st.begin();           long long uu = now;           while (uu > u) {             ans++;             uu /= 2;           }           for (auto itr = st.begin(); itr != st.end(); itr++) {             sum -= *itr;           }           st.clear();         }         if (ok[now] == false) {           if (sum >= now) {             sum -= now;             ok[now] = true;           } else {             st.insert(now);           }         }         now *= 2;         if (now > 1000000000000000000) break;       }       cout << ans << endl;     }   }   