#define ll long long
#define fo(i , n) for(ll i = 0 ; i < n ; i++)
#include<bits/stdc++.h>
using namespace std ;

ll max(ll a , ll b){if(a > b) return a ; return b ;}

vector<ll> dp((1LL << 22) + 5) ;

void query_subtask2(ll arr[])
{
    ll x , m ;
    cin >> x >> m ;
    ll y = 0 ;

    for(int i = 0 ; i < m ; i++)
    {
        ll u ;
        cin >> u ;
        u-- ;
        y |= arr[u] ;
    }

    if(y > x)
    {
        cout << -1 << endl ;
        return ;
    }

    ll ans = dp[y] ;
    
    for(int i = 22 ; i >= 0 ; i--)
    {
        ll curr = (1LL << i) ;

        if((x & curr) == 0)
            continue ;

        if((y & curr) != 0)
            continue ;

        ll new_y = (y | curr) ;
        ll yd = (((y >> i) << i) + curr - 1) ;
        ans = max(ans , dp[yd]) ;

        if(new_y > x)
            continue ;
        y = new_y ;
        ans = max(ans , dp[y]) ;
    }


    cout << ans << '\n' ;
}

void query_subtask1()
{
    ll x , m ;
    cin >> x >> m ;
    ll ans = 0 ;
    for(int i = 0 ; i <= x ; i++)
        ans = max(ans , dp[i]) ;
    cout << ans << '\n' ;
    return ;
}

void solve()
{
    ll n , q ;
    cin >> n >> q ;
    ll arr[n] ;

    for(int i = 0 ; i < n ; i++)
    {
        cin >> arr[i] ;
        dp[arr[i]]++ ;
    }

    
    for(int i = 0; i < 22; ++i)
    {
        for(int mask = 0; mask < (1<<22); ++mask)
        {
            if(mask & (1<<i))
                dp[mask] += dp[mask^(1<<i)];
        }
    }

    for(int i = 0 ; i < q ; i++)
    {
        query_subtask2(arr) ;
    }

    return ;
}

 
int main()
{   
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    #ifndef ONLINE_JUDGE
    freopen("inputf.txt" , "r" , stdin) ;
    freopen("outputf.txt" , "w" , stdout) ;
    freopen("error.txt" , "w" , stderr) ;
    #endif
    ll t = 1 ;
    // cin >> t ;
    while(t--)
    {
        solve() ;
    }
    
    cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC << "ms\n";
 
    return 0;
}