#include <bits/stdc++.h>
using namespace std;

typedef int in;
#define int long long
#define f first
#define s second
#define ins insert
#define pb push_back
#define cl clear()
#define RETURN exit(0)
#define top front
#ifndef ONLINE_JUDGE
#define debug(x) cout<<x<<endl;
#else
#define debug(x) 42
#endif

int arr[510]={-1};

in main()
{

    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    int tc=1;
    //scanf("%lld",&tc);
    while(tc--)
    {
        memset(arr,-1,sizeof arr);
        int n,k;
        cin>>n>>k;
        if(n-(k-1)>k-1){
            vector<int> v;
            for(int i=1;i<=k;i++){
                v.pb(i);
            }
            int y=k;
            for(int i=0;i<n-(k-1);i++){
                cout<<"? ";
                for(int i=0;i<k;i++){
                    cout<<v[i]<<" ";
                }
                cout<<endl;
                int x;
                cin>>x;
                int z;
                cin>>z;
                y++;
                for(int i=0;i<k;i++){
                    if(v[i]==x){
                        v[i]=y;

                        break;
                    }
                }
                arr[x-1]=z;

            }
            for(int i=0;i<n;i++)
                cout<<arr[i]<<" ";
            cout<<endl;
            vector<pair<int,int>> vec;
            int x=0;
            for(int i=0;i<n&&x<k;i++){
                if(arr[i]>=0){
                    x++;
                    vec.pb({arr[i],i+1});
                }
            }
            sort(vec.begin(),vec.end());
            cout<<"? ";
            for(int i=0;i<k;i++){
                cout<<vec[i].s<<" ";
            }
            cout<<endl;
            cin>>x>>y;
            for(int i=0;i<k;i++){
                if(vec[i].f==y){
                    cout<<"! "<<i+1<<endl;
                    RETURN;
                }
            }
        }
        else{
            vector<int> v;
            for(int i=1;i<=k;i++){
                v.pb(i);
            }
            int y=k;
            vector<int> vmx;
            int mn=INT_MAX,mni=0;
            int mx=0;
            for(int i=0;i<n-(k-1);i++){
                cout<<"? ";
                for(int i=0;i<k;i++){
                    cout<<v[i]<<" ";
                }
                cout<<endl;
                int x;
                cin>>x;
                int z;
                cin>>z;
                if(z>mx){
                    vmx.cl;
                    for(int i=0;i<k;i++)
                        vmx.pb(v[i]);
                    mx=z;
                }
                if(z<mn){
                    mn=z;
                    mni=x-1;
                }
                y++;
                for(int i=0;i<k;i++){
                    if(v[i]==x){
                        v[i]=y;

                        break;
                    }
                }
                arr[x-1]=z;

            }
            int ans=0;
            for(int i=0;i<k;i++){
                if(mx==arr[vmx[i]-1])
                    continue;
                int zz=vmx[i];
                vmx[i]=mni+1;
                cout<<"? ";
                for(int i=0;i<k;i++)
                    cout<<vmx[i]<<" ";
                cout<<endl;
                int a,b;
                cin>>a>>b;
                if(b!=mx){
                    ans++;
                }
                vmx[i]=zz;
            }
            cout<<"! "<<k-ans<<endl;
        }
    }
    ///matensa4 tegarab el sample w te7ot el freopen w te3mel SCANF
    RETURN;
}


#include <bits/stdc++.h>
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
using namespace std;

#define fastio ios_base::sync_with_stdio(0LL);cin.tie(0LL);
#define fileio_task freopen("substr4.in", "r", stdin);freopen("substr4.out", "w", stdout);
#define fileio freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define int long long

signed main() {
//    fileio
//    fastio
    int n, k;
    cin >> n >> k;
    if (k == 1) {
        cout << "! 1" << endl;
        return 0;
    }
    cout << "?";
    for (int i = 1; i <= k; ++i) {
        cout << " " << i;
    }
    cout << '\n';
    cout.flush();
    int pos, apos;
    cin >> pos >> apos;
    cout << "?";
    for (int i = 1; i <= k + 1; ++i) {
        if (i == pos) continue;
        cout << " " << i;
    }
    cout << '\n';
    cout.flush();
    int pos2, apos2;
    cin >> pos2 >> apos2;
    int cnt = 1;
    int al = pos2;
    if (apos2 < apos) al = pos;
    for (int j = 1; j <= k; ++j) {
        if (j == pos) continue;
        cout << "?";
        for (int i = 1; i <= k; ++i) {
            if (i == pos || i == pos2 || i == j) continue;
            cout << " " << i;
        }
        cout << " " << pos << " " << pos2 << '\n';
        cout.flush();
        int pos1, apos1;
        cin >> pos1 >> apos1;
        if (al == pos1) {
            ++cnt;
        }
    }
    cout << "! " << cnt << '\n';
    cout.flush();
}


#include <bits/stdc++.h>
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
using namespace std;

#define fastio ios_base::sync_with_stdio(0LL);cin.tie(0LL);
#define fileio_task freopen("substr4.in", "r", stdin);freopen("substr4.out", "w", stdout);
#define fileio freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define int long long

signed main() {
//    fileio
//    fastio
    int n, k;
    cin >> n >> k;
    if (k == 1) {
        cout << "! 1" << endl;
        return 0;
    }
    cout << "?";
    for (int i = 1; i <= k; ++i) {
        cout << " " << i;
    }
    cout << endl;
    int pos, apos;
    cin >> pos;
    if (pos == -1) {
        return 0;
    }
    cin >> apos;
    if (apos == -1) {
        return 0;
    }
    cout << "?";
    for (int i = 1; i <= k + 1; ++i) {
        if (i == pos) continue;
        cout << " " << i;
    }
    cout << endl;
    int pos2, apos2;
    cin >> pos2;
    if (pos2 == -1) {
        return 0;
    }
    cin >> apos2;
    if (apos2 == -1) {
        return 0;
    }
    int cnt = 1;
    int al = pos2;
    if (apos2 < apos) al = pos;
    for (int j = 1; j <= k; ++j) {
        if (j == pos || j == pos2) continue;
        cout << "?";
        for (int i = 1; i <= k + 1; ++i) {
            if (i == pos || i == pos2 || i == j) continue;
            cout << " " << i;
        }
        cout << " " << pos << " " << pos2 << endl;
        int pos1, apos1;
        cin >> pos1;
        if (pos1 == -1) {
            return 0;
        }
        cin >> apos1;
        if (apos1 == -1) {
            return 0;
        }
        if (al == pos1) {
            ++cnt;
        }
    }
    cout << "! " << cnt << endl;
    return 0;
}


#include <bits/stdc++.h>
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
using namespace std;

#define fastio ios_base::sync_with_stdio(0LL);cin.tie(0LL);
#define fileio_task freopen("substr4.in", "r", stdin);freopen("substr4.out", "w", stdout);
#define fileio freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define int long long

signed main() {
//    fileio
//    fastio
    int n, k;
    cin >> n >> k;
    if (k == 1) {
        cout << "! 1" << endl;
        return 0;
    }
    cout << "?";
    for (int i = 1; i <= k; ++i) {
        cout << " " << i;
    }
    cout << endl;
    int pos, apos;
    cin >> pos;
    if (pos == -1) {
        return 0;
    }
    cin >> apos;
    if (apos == -1) {
        return 0;
    }
    cout << "?";
    for (int i = 1; i <= k + 1; ++i) {
        if (i == pos) continue;
        cout << " " << i;
    }
    cout << endl;
    int pos2, apos2;
    cin >> pos2;
    if (pos2 == -1) {
        return 0;
    }
    cin >> apos2;
    if (apos2 == -1) {
        return 0;
    }
    int cnt = 1;
    int al = pos2;
    if (apos2 < apos) al = pos;
    for (int j = 1; j <= k + 1; ++j) {
        if (j == pos || j == pos2) continue;
        cout << "?";
        for (int i = 1; i <= k + 1; ++i) {
            if (i == pos || i == pos2 || i == j) continue;
            cout << " " << i;
        }
        cout << " " << pos << " " << pos2 << endl;
        int pos1, apos1;
        cin >> pos1;
        if (pos1 == -1) {
            return 0;
        }
        cin >> apos1;
        if (apos1 == -1) {
            return 0;
        }
        if (al == pos1) {
            ++cnt;
        }
    }
    cout << "! " << cnt << endl;
    return 0;
}


#include <bits/stdc++.h>
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
using namespace std;

#define fastio ios_base::sync_with_stdio(0LL);cin.tie(0LL);
#define fileio_task freopen("substr4.in", "r", stdin);freopen("substr4.out", "w", stdout);
#define fileio freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define int long long

signed main() {
//    fileio
//    fastio
    int n, k;
    cin >> n >> k;
    if (k == 1) {
        cout << "! 1" << endl;
        return 0;
    }
    cout << "?";
    for (int i = 1; i <= k; ++i) {
        cout << " " << i;
    }
    cout << '\n';
    cout.flush();
    int pos, apos;
    cin >> pos;
    if (pos == -1) {
        return 0;
    }
    cin >> apos;
    if (apos == -1) {
        return 0;
    }
    cout << "?";
    for (int i = 1; i <= k + 1; ++i) {
        if (i == pos) continue;
        cout << " " << i;
    }
    cout << '\n';
    cout.flush();
    int pos2, apos2;
    cin >> pos2;
    if (pos2 == -1) {
        return 0;
    }
    cin >> apos2;
    if (apos2 == -1) {
        return 0;
    }
    int cnt = 1;
    int al = pos2;
    if (apos2 < apos) al = pos;
    for (int j = 1; j <= k; ++j) {
        if (j == pos || j == pos2) continue;
        cout << "?";
        for (int i = 1; i <= k; ++i) {
            if (i == pos || i == pos2 || i == j) continue;
            cout << " " << i;
        }
        cout << " " << pos << " " << pos2 << '\n';
        cout.flush();
        int pos1, apos1;
        cin >> pos1;
        if (pos1 == -1) {
            return 0;
        }
        cin >> apos1;
        if (apos1 == -1) {
            return 0;
        }
        if (al == pos1) {
            ++cnt;
        }
    }
    cout << "! " << cnt << '\n';
    cout.flush();
    return 0;
}


#include <bits/stdc++.h>
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
using namespace std;

#define fastio ios_base::sync_with_stdio(0LL);cin.tie(0LL);
#define fileio_task freopen("substr4.in", "r", stdin);freopen("substr4.out", "w", stdout);
#define fileio freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define int long long

signed main() {
//    fileio
    fastio
    int n, k;
    cin >> n >> k;
    if (k == 1) {
        cout << "! 1" << endl;
        return 0;
    }
    cout << "?";
    for (int i = 0; i < k; ++i) {
        cout << " " << i + 1;
    }
    cout << endl;
    int pos, apos;
    cin >> pos >> apos;
    cout << "?";
    for (int i = 0; i < k + 1; ++i) {
        if (i + 1 == pos) continue;
        cout << " " << i + 1;
    }
    cout << endl;
    int pos2, apos2;
    cin >> pos2 >> apos2;
    int cnt = 0;
    int al = pos2;
    if (apos2 < apos) al = pos;
    for (int j = 1; j <= k; ++j) {
        if (j == pos) continue;
        cout << "?";
        for (int i = 1; i <= k; ++i) {
            if (i == pos || i == pos2 || i == j) continue;
            cout << " " << i;
        }
        cout << " " << pos << " " << pos2 << endl;
        int pos1, apos1;
        cin >> pos1 >> apos1;
        if (al == pos1) {
            ++cnt;
        }
    }
    cout << "! " << cnt + 1 << endl;
}


#include <bits/stdc++.h>
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
using namespace std;

#define fastio ios_base::sync_with_stdio(0LL);cin.tie(0LL);
#define fileio_task freopen("substr4.in", "r", stdin);freopen("substr4.out", "w", stdout);
#define fileio freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define int long long

signed main() {
//    fileio
    fastio
    int n, k;
    cin >> n >> k;
    cout << "?";
    for (int i = 0; i < k; ++i) {
        cout << " " << i + 1;
    }
    cout << endl;
    int pos, apos;
    cin >> pos >> apos;
    cout << "?";
    for (int i = 0; i < k + 1; ++i) {
        if (i + 1 == pos) continue;
        cout << " " << i + 1;
    }
    cout << endl;
    int pos2, apos2;
    cin >> pos2 >> apos2;
    int cnt = 0;
    int al = pos2;
    if (apos2 < apos) al = pos;
    for (int j = 0; j < k; ++j) {
        if (j + 1 == pos) continue;
        cout << "?";
        for (int i = 0; i < k; ++i) {
            if (i + 1 == pos || i + 1 == pos2 || i == j) continue;
            cout << " " << i + 1;
        }
        cout << " " << pos << " " << pos2 << endl;
        int pos1, apos1;
        cin >> pos1 >> apos1;
        if (al == pos1) {
            ++cnt;
        }
    }
    cout << "! " << cnt + 1 << endl;
}


#include <bits/stdc++.h>
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
using namespace std;

#define fastio ios_base::sync_with_stdio(0LL);cin.tie(0LL);
#define fileio_task freopen("substr4.in", "r", stdin);freopen("substr4.out", "w", stdout);
#define fileio freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define int long long

signed main() {
//    fileio
//    fastio
    int n, k;
    cin >> n >> k;
    if (k == 1) {
        cout << "! 1" << endl;
        return 0;
    }
    cout << "?";
    for (int i = 1; i <= k; ++i) {
        cout << " " << i;
    }
    cout << '\n';
    cout.flush();
    int pos, apos;
    cin >> pos >> apos;
    cout << "?";
    for (int i = 1; i <= k + 1; ++i) {
        if (i == pos) continue;
        cout << " " << i;
    }
    cout << '\n';
    cout.flush();
    int pos2, apos2;
    cin >> pos2 >> apos2;
    int cnt = 1;
    int al = pos2;
    if (apos2 < apos) al = pos;
    for (int j = 1; j <= k; ++j) {
        if (j == pos) continue;
        cout << "?";
        for (int i = 1; i <= k; ++i) {
            if (i == pos || i == pos2 || i == j) continue;
            cout << " " << i;
        }
        cout << " " << pos << " " << pos2 << '\n';
        cout.flush();
        int pos1, apos1;
        cin >> pos1 >> apos1;
        if (al == pos1) {
            ++cnt;
        }
    }
    cout << "! " << cnt << '\n';
    cout.flush();
    return 0;
}


#include <bits/stdc++.h>
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
using namespace std;

#define fastio ios_base::sync_with_stdio(0LL);cin.tie(0LL);
#define fileio_task freopen("substr4.in", "r", stdin);freopen("substr4.out", "w", stdout);
#define fileio freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define int long long

signed main() {
//    fileio
//    fastio
    int n, k;
    cin >> n >> k;
    if (k == 1) {
        cout << "! 1" << endl;
        return 0;
    }
    cout << "?";
    for (int i = 1; i <= k; ++i) {
        cout << " " << i;
    }
    cout << '\n';
    cout.flush();
    int pos, apos;
    cin >> pos;
    if (pos == -1) {
        return 0;
    }
    cin >> apos;
    cout << "?";
    for (int i = 1; i <= k + 1; ++i) {
        if (i == pos) continue;
        cout << " " << i;
    }
    cout << '\n';
    cout.flush();
    int pos2, apos2;
    cin >> pos2;
    if (pos2 == -1) {
        return 0;
    }
    cin >> apos2;
    int cnt = 1;
    int al = pos2;
    if (apos2 < apos) al = pos;
    for (int j = 1; j <= k; ++j) {
        if (j == pos) continue;
        cout << "?";
        for (int i = 1; i <= k; ++i) {
            if (i == pos || i == pos2 || i == j) continue;
            cout << " " << i;
        }
        cout << " " << pos << " " << pos2 << '\n';
        cout.flush();
        int pos1, apos1;
        cin >> pos1;
        if (pos1 == -1) {
            return 0;
        }
        cin >> apos1;
        if (al == pos1) {
            ++cnt;
        }
    }
    cout << "! " << cnt << '\n';
    cout.flush();
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> m;
	ll c;
	//vector<ll> left,right;
	for (int i=1;i<=k+1;i++)
	{
		cout<<"? ";
	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{
				if (i==f)
				{
					if (b<g)
					{
					  c=m[a];
					}
					else
					c=-m[a];
					break;
				}
				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
					m[i]=1;
					m[1]=1;
				}
			}

	}
     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"! "<<count+1;
	 cout.flush();

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> m;
	ll c;
	//vector<ll> left,right;
	if (k==1)
	{
		cout<<"! "<<1;
		return 0;
	}
	for (int i=1;i<=k+1;i++)
	{

		if (i!=f)
		{
			cout<<"? ";

	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{

				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
				   if (m[1]!=0)
				   {
				   	m[i]=m[1];
				   }
				   else
				   {
				   	m[i]=1;
				   	m[1]=1;
				   }
				}
			}}

	}
	cout<<"? ";
		for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=f)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;

					if (k==1)
					{
						c=123;

					}
					if (b<g)
					{
					  c=m[a];
					}
					else
					c=-m[a];

     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"! "<<count+1;
	 cout.flush();

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> m;
	ll c;
	//vector<ll> left,right;
	for (int i=1;i<=k+1;i++)
	{
		cout<<"? ";
	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{
				if (i==f)
				{
					if (b<g)
					{
					  c=m[i];
					}
					else
					c=-m[i];
					break;
				}
				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
					m[i]=1;
					m[1]=1;
				}
			}

	}
     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"! "<<count;
	 cout.flush();

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> h;
	ll c;
	//vector<ll> left,right;
	for (int i=1;i<=k+1;i++)
	{
		cout<<"? ";
	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{
				if (i==f)
				{
					if (b<g)
					{
					  c=m[i];
					}
					break;
				}
				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[i-1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
					m[i]=1;
					m[1]=1;
				}
			}

	}
     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"!"<<count;

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> m;
	ll c;
	//vector<ll> left,right;
	for (int i=1;i<=k+1;i++)
	{
		cout<<"? ";
	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{
				if (i==f)
				{
					if (k==1)
					{
						c=123;
						break;
					}
					if (b<g)
					{
					  c=m[a];
					}
					else
					c=-m[a];
					break;
				}
				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
					m[i]=1;
					m[1]=1;
				}
			}

	}
     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"! "<<count+1;
	 cout.flush();

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> m;
	ll c;
	//vector<ll> left,right;
	for (int i=1;i<=k+1;i++)
	{

		if (i!=f)
		{
			cout<<"? ";

	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{

				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
					m[i]=1;
					m[1]=1;
				}
			}}

	}
	cout<<"? ";
		for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=f)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;

					if (k==1)
					{
						c=123;

					}
					if (b<g)
					{
					  c=m[a];
					}
					else
					c=-m[a];

     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"! "<<count+1;
	 cout.flush();

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> m;
	ll c;
	//vector<ll> left,right;
	for (int i=1;i<=k+1;i++)
	{
		cout<<"? ";
		if (i!=f)
		{

	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{

				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
					m[i]=1;
					m[1]=1;
				}
			}}

	}
	cout<<"? ";
		for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=f)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;

					if (k==1)
					{
						c=123;

					}
					if (b<g)
					{
					  c=m[a];
					}
					else
					c=-m[a];

     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"! "<<count+1;
	 cout.flush();

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> m;
	ll c;
	//vector<ll> left,right;
	if (k==1)
	{
		cout<<"! "<<1;
		return 0;
	}
	for (int i=1;i<=k+1;i++)
	{

		if (i!=f)
		{
			cout<<"? ";

	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{

				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
					m[i]=1;
					m[1]=1;
				}
			}}

	}
	cout<<"? ";
		for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=f)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;

					if (k==1)
					{
						c=123;

					}
					if (b<g)
					{
					  c=m[a];
					}
					else
					c=-m[a];

     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"! "<<count+1;
	 cout.flush();

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> m;
	ll c;
	//vector<ll> left,right;
	for (int i=1;i<=k+1;i++)
	{
		cout<<"? ";
	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{
				if (i==f)
				{
					if (b<g)
					{
					  c=m[a];
					}
					else
					c=-m[a];
					break;
				}
				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
					m[i]=1;
					m[1]=1;
				}
			}

	}
     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"! "<<count;
	 cout.flush();

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> m;
	ll c;
	//vector<ll> left,right;
	for (int i=1;i<=k+1;i++)
	{
		cout<<"? ";
	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{
				if (i==f)
				{
					if (b<g)
					{
					  c=m[i];
					}
					break;
				}
				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[i-1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
					m[i]=1;
					m[1]=1;
				}
			}

	}
     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"! "<<count;

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> m;
	ll c;
	//vector<ll> left,right;
	for (int i=1;i<=k+1;i++)
	{
		cout<<"? ";
	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{
				if (i==f)
				{
					if (b<g)
					{
					  c=m[i];
					}
					break;
				}
				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[i-1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
					m[i]=1;
					m[1]=1;
				}
			}

	}
     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"!"<<count;

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define pb push_back
#define FAST ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);srand(time(NULL));
#define all(v) v.begin(),v.end()
#define MN 1e9+7
ll nCr(ll n,ll r)
{
	vector<vector<ll> > ans(n+1);
	ans[0].pb(1);
	ans[1].pb(1);
	ans[1].pb(1);
	for (int i=2;i<=n;i++)
	{
		ans[i].pb(1);
		for (int j=1;j<ans[i-1].size();j++)
		{
			ans[i].pb(ans[i-1][j-1]+ans[i-1][j]);
		}
		ans[i].pb(1);
	}
	return ans[n][r];

}

/*ll lower(ll n)
{
	ll l=1;
	ll r=n;
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		ll p=mid*(mid+1);
		p/=2;
		if (p<n)
		{
			ans=mid;
			l=mid+1;
		}
		else
		r=mid-1;
	}
	return ans;
}*/
ll lower(vector<pair<ll,ll> > v,ll m)
{
	ll l=1;
	ll r=v.size();
	ll ans;
	while(l<=r)
	{
		ll mid=(l+r)/2;
		if (v[mid-1].f==m)
		{
			return mid-1;
		}
		else if (v[mid-1].f<m)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans-1;
}
bool isprime(ll n)
{
    // Corner cases
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if (n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
}
ll nmod(ll h,ll m)
{
	while (h<0)
	{
		h+=m;
	}
	return h%m;
}
int make(string s,string p)
{
	transform(s.begin(), s.end(), s.begin(), ::tolower);
	map<char,int> m,k;
	int ans=0;
      for (int i=0;i<s.size();i++)
      m[s[i]]=1;
      for (int i=0;i<p.size();i++)
      {
         k[p[i]]=1;
	  }
	  for (map<char,int> :: iterator it=k.begin();it!=k.end();it++)
	  {
	  	if (it->second==m[it->first])
	  	ans++;
	  }
	  return ans;
}
 ll ans(ll a,ll b)
 {
 	if (a==1)
 	return b;
 	if (b==1)
 	return a;
 	if (a>b)
 	return a/b+ans(a%b,b);
 	else
 	return b/a+ans(b%a,a);
 }

int main()
{

     FAST
    ll n,k;
	cin>>n>>k;
	ll f=0,g=0;
	map<ll,ll> m;
	ll c;
	//vector<ll> left,right;
	for (int i=1;i<=k+1;i++)
	{
		cout<<"? ";
		if (i!=f)
		{

	    	for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=i)
	    		{
	    			cout<<j<<" ";
				}
			}}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;
			if (f==0 && g==0)
			{

			f=a;
			g=b;}
			else
			{

				if (f!=a)
				{
					if (m[i]==0 && m[1]==0)
					{
						m[i]=1;
						m[1]=-1;
					}
					else
					{
					  m[i]=(-1)*m[1];
					}
				}
				else
				{
					m[i]=1;
					m[1]=1;
				}
			}

	}
	cout<<"? ";
		for (int j=k+1;j>=1;j--)
	    	{
	    		if (j!=f)
	    		{
	    			cout<<j<<" ";
				}
			}
			cout<<endl;
			cout.flush();
			ll a,b;
			cin>>a>>b;

					if (k==1)
					{
						c=123;

					}
					if (b<g)
					{
					  c=m[a];
					}
					else
					c=-m[a];

     ll count=0;
     for (int i=2;i<=k+1;i++)
     {
     	if(c==m[i])
     	count++;
	 }
	 cout<<"! "<<count+1;
	 cout.flush();

	 return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll n,k;
    cin>>n>>k;
    ll a[k+1];
    ll y=-1;
    for(ll i=0;i<=k;i++)
    {
        cout<<"? ";
        for(ll j=0;j<=k;j++)
        if(j!=i)
        cout<<j+1<<" ";
        cout<<endl;
        ll x;
        cin>>x>>a[i];
        y=max(y,a[i]);
    }
    ll ans=0;
    for(ll i=0;i<=k;i++)
    if(a[i]==y)
    ans++;
    cout<<"! ";
    cout<<ans<<"\n";

    return 0;

}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll n,k;
    cin>>n>>k;
    ll a[k+1];
    ll y=-1;
    for(ll i=0;i<=k;i++)
    {
        cout<<"?";
        for(ll j=0;j<=k;j++)
        if(j!=i)
        cout<<j+1<<" ";
        cout<<"\n";
        ll x;
        cin>>x>>a[i];
        y=max(y,a[i]);
    }
    ll ans=0;
    for(ll i=0;i<=k;i++)
    if(a[i]==y)
    ans++;
    cout<<"!";
    cout<<ans<<"\n";

    return 0;

}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll n,k;
    cin>>n>>k;
    ll a[k+1];
    ll y=-1;
    for(ll i=0;i<=k;i++)
    {
        cout<<"?"
        for(ll j=0;j<=k;j++)
        if(j!=i)
        cout<<j+1<<" ";
        cout<<"\n";
        ll x;
        cin>>x>>a[i];
        y=max(y,a[i]);
    }
    ll ans=0;
    for(ll i=0;i<=k;i++)
    if(a[i]==y)
    ans++;
    cout<<"!";
    cout<<ans<<"\n";

    return 0;

}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll n,k;
    cin>>n>>k;
    ll a[k+1];
    ll y=-1;
    for(ll i=0;i<=k;i++)
    {
        cout<<"? ";
        for(ll j=0;j<=k;j++)
        if(j!=i)
        cout<<j+1<<" ";
        cout<<endl;
        ll x;
        cin>>x>>a[i];
        y=max(y,a[i]);
    }
    ll ans=0;
    for(ll i=0;i<=k;i++)
    if(a[i]==y)
    ans++;
    cout<<"!";
    cout<<ans<<"\n";

    return 0;

}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll n,k;
    cin>>n>>k;
    ll a[k+1];
    ll y=-1;
    for(ll i=0;i<=k;i++)
    {
        cout<<"? "
        for(ll j=0;j<=k;j++)
        if(j!=i)
        cout<<j+1<<" ";
        cout<<"\n";
        ll x;
        cin>>x>>a[i];
        y=max(y,a[i]);
    }
    ll ans=0;
    for(ll i=0;i<=k;i++)
    if(a[i]==y)
    ans++;
    cout<<"!";
    cout<<ans<<"\n";

    return 0;

}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll n,k;
    cin>>n>>k;
    ll a[k+1];
    ll y=-1;
    for(ll i=0;i<=k;i++)
    {
        cout<<"? ";
        for(ll j=0;j<=k;j++)
        if(j!=i)
        cout<<j+1<<" ";
        cout<<"\n";
        ll x;
        cin>>x>>a[i];
        y=max(y,a[i]);
    }
    ll ans=0;
    for(ll i=0;i<=k;i++)
    if(a[i]==y)
    ans++;
    cout<<"!";
    cout<<ans<<"\n";

    return 0;

}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll                long long int
#define ld                long double
#define pb                push_back
#define mk                make_pair
#define vi                vector<ll>
#define vii               vector<pair<ll,ll>>
#define vpp               vector<pair<ll,pair<ll,ll>>>
#define vll               vector<ll>
#define vc                vector<char>
#define vs                vector<string>
#define mll               map<ll,ll>
#define mci               map<char,ll>
#define msi               map<string,ll>
#define in(i,a,n)         for(ll i=0;i<n;++i) cin>>a[i];
#define out(i,a,n)        for(ll i=0;i<n;++i) cout<<a[i]<<" ";
#define sz(c)             (ll)c.size()
#define len(c)            (ll)c.length()
#define hell              (ll)1000000007
#define all(c)            c.begin(), c.end()
#define rall(c)           c.rbegin(), c.rend()
#define trav(a,i)         for(auto& i: a)
#define loop(i,a,b)       for(ll i=a;i<b;i++)
#define rloop(i,a,b)      for(ll i=a;i>b;i--)
#define invect(v,n)       for(ll i=0;i<n;i++ ){ll arb;cin>>arb;v.pb(arb);}
#define inset(s,n)        forloop(n){ll aset;cin>>aset;s.insert(aset);}
#define F                 first
#define S                 second
#define pii               pair<ll,ll>
#define PB                pop_back
#define copy(a,b)         copy(all(a),back_inserter(b));
#define section(a,b,w)    set_intersection(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define union(a,b,w)      set_union(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define diff(a,b,w)       set_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define symdiff(a,b,w)    set_symmetric_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define sp(n)             setprecision(n)
#define fin               freopen( "input.txt", "r", stdin );
#define fout              freopen( "output.txt", "w", stdout );
#define outall(a)         loop(i,0,sizeof(a)/sizeof(a[0])) cout<<a[i]<<" "; cout<<endl
#define endl "\n"
const ll N=300001;
//const ll MOD = 1000 * 1000 * 1000 + 7;
const ll MOD = 998244353;
ll mod(ll n) {
    return (n % MOD + MOD) % MOD;
}

//vector<ll> v;
 ll powm(ll a,ll b, ll m){
    if(b==0) return 1;
    ll t=powm(a,b/2,m);
    if(b%2) return a*t%m*t%m;
    return t*t%m;
 }

/*ll binpow(ll a, ll b) {
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}*/

/*int bs(int a[],int low, int high, int val)
{
    int mid=(low+high)/2;
    if(low>high) return -1;
    if(a[mid]>val) bs(a,low,mid-1,val);
    else if(a[mid]<val) bs(a,mid+1,high,val);
    else return mid;
}*/

void solve(){
    int n,m,i,j,k,ans=-1,cnt=0;
    cin>>n>>k;
    vector<int> v;
    for(i=1;i<=k+1;i++){
        cout<<"? ";
        for(j=1;j<=k+1;j++){
            if(i!=j) cout<<j<<' ';
        }
        cout<<endl;
        int pos,elem;
        cin>>pos>>elem;
        v.pb(elem);
    }
    for(auto& i: v){
        ans=max(ans,i);
    }
    for(auto& i : v){
        if(i==ans) cnt++;
    }
    cout<<"! "<<cnt<<endl;
}

signed main(){
    //fin fout
    fast
    ll t=1; //cin>>t;
    while(t--) solve();
}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll                long long int
#define ld                long double
#define pb                push_back
#define mk                make_pair
#define vi                vector<ll>
#define vii               vector<pair<ll,ll>>
#define vpp               vector<pair<ll,pair<ll,ll>>>
#define vll               vector<ll>
#define vc                vector<char>
#define vs                vector<string>
#define mll               map<ll,ll>
#define mci               map<char,ll>
#define msi               map<string,ll>
#define in(i,a,n)         for(ll i=0;i<n;++i) cin>>a[i];
#define out(i,a,n)        for(ll i=0;i<n;++i) cout<<a[i]<<" ";
#define sz(c)             (ll)c.size()
#define len(c)            (ll)c.length()
#define hell              (ll)1000000007
#define all(c)            c.begin(), c.end()
#define rall(c)           c.rbegin(), c.rend()
#define trav(a,i)         for(auto& i: a)
#define loop(i,a,b)       for(ll i=a;i<b;i++)
#define rloop(i,a,b)      for(ll i=a;i>b;i--)
#define invect(v,n)       for(ll i=0;i<n;i++ ){ll arb;cin>>arb;v.pb(arb);}
#define inset(s,n)        forloop(n){ll aset;cin>>aset;s.insert(aset);}
#define F                 first
#define S                 second
#define pii               pair<ll,ll>
#define PB                pop_back
#define copy(a,b)         copy(all(a),back_inserter(b));
#define section(a,b,w)    set_intersection(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define union(a,b,w)      set_union(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define diff(a,b,w)       set_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define symdiff(a,b,w)    set_symmetric_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define sp(n)             setprecision(n)
#define fin               freopen( "input.txt", "r", stdin );
#define fout              freopen( "output.txt", "w", stdout );
#define outall(a)         loop(i,0,sizeof(a)/sizeof(a[0])) cout<<a[i]<<" "; cout<<endl
#define endl "\n"
const ll N=300001;
//const ll MOD = 1000 * 1000 * 1000 + 7;
const ll MOD = 998244353;
ll mod(ll n) {
    return (n % MOD + MOD) % MOD;
}

//vector<ll> v;
 ll powm(ll a,ll b, ll m){
    if(b==0) return 1;
    ll t=powm(a,b/2,m);
    if(b%2) return a*t%m*t%m;
    return t*t%m;
 }

/*ll binpow(ll a, ll b) {
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}*/

/*int bs(int a[],int low, int high, int val)
{
    int mid=(low+high)/2;
    if(low>high) return -1;
    if(a[mid]>val) bs(a,low,mid-1,val);
    else if(a[mid]<val) bs(a,mid+1,high,val);
    else return mid;
}*/

void solve(){
    int n,m,i,j,k,ans,cnt=0;
    cin>>n>>k;
    vector<int> v;
    for(i=1;i<=k+1;i++){
        printf("? ");
        for(j=1;j<=k+1;j++){
            if(i!=j) printf("%d ",j);
        }
        fflush(stdout);
        int pos,elem;
        scanf("%d %d",pos,elem);
        v.pb(elem);
    }
    ans=v[0];
    for(auto i: v){
        ans=max(ans,i);
    }
    for(auto i : v){
        if(i==ans) cnt++;
    }
    printf("! %d\n",cnt); fflush(stdout);
}

signed main(){
    //fin fout
    fast
    ll t=1; //cin>>t;
    while(t--) solve();
}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll                long long int
#define ld                long double
#define pb                push_back
#define mk                make_pair
#define vi                vector<ll>
#define vii               vector<pair<ll,ll>>
#define vpp               vector<pair<ll,pair<ll,ll>>>
#define vll               vector<ll>
#define vc                vector<char>
#define vs                vector<string>
#define mll               map<ll,ll>
#define mci               map<char,ll>
#define msi               map<string,ll>
#define in(i,a,n)         for(ll i=0;i<n;++i) cin>>a[i];
#define out(i,a,n)        for(ll i=0;i<n;++i) cout<<a[i]<<" ";
#define sz(c)             (ll)c.size()
#define len(c)            (ll)c.length()
#define hell              (ll)1000000007
#define all(c)            c.begin(), c.end()
#define rall(c)           c.rbegin(), c.rend()
#define trav(a,i)         for(auto& i: a)
#define loop(i,a,b)       for(ll i=a;i<b;i++)
#define rloop(i,a,b)      for(ll i=a;i>b;i--)
#define invect(v,n)       for(ll i=0;i<n;i++ ){ll arb;cin>>arb;v.pb(arb);}
#define inset(s,n)        forloop(n){ll aset;cin>>aset;s.insert(aset);}
#define F                 first
#define S                 second
#define pii               pair<ll,ll>
#define PB                pop_back
#define copy(a,b)         copy(all(a),back_inserter(b));
#define section(a,b,w)    set_intersection(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define union(a,b,w)      set_union(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define diff(a,b,w)       set_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define symdiff(a,b,w)    set_symmetric_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define sp(n)             setprecision(n)
#define fin               freopen( "input.txt", "r", stdin );
#define fout              freopen( "output.txt", "w", stdout );
#define outall(a)         loop(i,0,sizeof(a)/sizeof(a[0])) cout<<a[i]<<" "; cout<<endl
#define endl "\n"
const ll N=300001;
//const ll MOD = 1000 * 1000 * 1000 + 7;
const ll MOD = 998244353;
ll mod(ll n) {
    return (n % MOD + MOD) % MOD;
}

//vector<ll> v;
 ll powm(ll a,ll b, ll m){
    if(b==0) return 1;
    ll t=powm(a,b/2,m);
    if(b%2) return a*t%m*t%m;
    return t*t%m;
 }

/*ll binpow(ll a, ll b) {
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}*/

/*int bs(int a[],int low, int high, int val)
{
    int mid=(low+high)/2;
    if(low>high) return -1;
    if(a[mid]>val) bs(a,low,mid-1,val);
    else if(a[mid]<val) bs(a,mid+1,high,val);
    else return mid;
}*/

void solve(){
    int n,m,i,j,k,ans=-1,cnt=0;
    cin>>n>>k;
    vector<int> v;
    for(i=1;i<=k+1;i++){
        cout<<"? ";
        for(j=1;j<=k+1;j++){
            if(i!=j) cout<<j<<' ';
        }
        cout<<endl;
        int pos,elem;
        cin>>pos>>elem;
        v.pb(elem);
    }
    ans=v[0];
    for(auto i: v){
        ans=max(ans,i);
    }
    for(auto i : v){
        if(i==ans) cnt++;
    }
    cout<<"! "<<cnt<<endl;
}

signed main(){
    //fin fout
    fast
    ll t=1; //cin>>t;
    while(t--) solve();
}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll                long long int
#define ld                long double
#define pb                push_back
#define mk                make_pair
#define vi                vector<ll>
#define vii               vector<pair<ll,ll>>
#define vpp               vector<pair<ll,pair<ll,ll>>>
#define vll               vector<ll>
#define vc                vector<char>
#define vs                vector<string>
#define mll               map<ll,ll>
#define mci               map<char,ll>
#define msi               map<string,ll>
#define in(i,a,n)         for(ll i=0;i<n;++i) cin>>a[i];
#define out(i,a,n)        for(ll i=0;i<n;++i) cout<<a[i]<<" ";
#define sz(c)             (ll)c.size()
#define len(c)            (ll)c.length()
#define hell              (ll)1000000007
#define all(c)            c.begin(), c.end()
#define rall(c)           c.rbegin(), c.rend()
#define trav(a,i)         for(auto& i: a)
#define loop(i,a,b)       for(ll i=a;i<b;i++)
#define rloop(i,a,b)      for(ll i=a;i>b;i--)
#define invect(v,n)       for(ll i=0;i<n;i++ ){ll arb;cin>>arb;v.pb(arb);}
#define inset(s,n)        forloop(n){ll aset;cin>>aset;s.insert(aset);}
#define F                 first
#define S                 second
#define pii               pair<ll,ll>
#define PB                pop_back
#define copy(a,b)         copy(all(a),back_inserter(b));
#define section(a,b,w)    set_intersection(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define union(a,b,w)      set_union(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define diff(a,b,w)       set_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define symdiff(a,b,w)    set_symmetric_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define sp(n)             setprecision(n)
#define fin               freopen( "input.txt", "r", stdin );
#define fout              freopen( "output.txt", "w", stdout );
#define outall(a)         loop(i,0,sizeof(a)/sizeof(a[0])) cout<<a[i]<<" "; cout<<endl
#define endl "\n"
const ll N=300001;
//const ll MOD = 1000 * 1000 * 1000 + 7;
const ll MOD = 998244353;
ll mod(ll n) {
    return (n % MOD + MOD) % MOD;
}

//vector<ll> v;
 ll powm(ll a,ll b, ll m){
    if(b==0) return 1;
    ll t=powm(a,b/2,m);
    if(b%2) return a*t%m*t%m;
    return t*t%m;
 }

/*ll binpow(ll a, ll b) {
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}*/

/*int bs(int a[],int low, int high, int val)
{
    int mid=(low+high)/2;
    if(low>high) return -1;
    if(a[mid]>val) bs(a,low,mid-1,val);
    else if(a[mid]<val) bs(a,mid+1,high,val);
    else return mid;
}*/

void solve(){
    int n,m,i,j,k,ans,cnt=0;
    cin>>n>>k;
    vector<int> v;
    for(i=1;i<=k+1;i++){
        printf("? ");
        for(j=1;j<=k+1;j++){
            if(i!=j) printf("%d ",j);
        }
        fflush(stdout);
        int pos,elem;
        scanf("%d %d",pos,elem);
        v.pb(elem);
    }
    ans=v[0];
    for(i=0;i<sz(v);i++) ans=max(ans,v[i]);
    for(i=0;i<sz(v);i++) if(v[i]==ans) cnt++;
    printf("! %d\n",cnt); fflush(stdout);
}

signed main(){
    //fin fout
    fast
    ll t=1; //cin>>t;
    while(t--) solve();
}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll                long long int
#define ld                long double
#define pb                push_back
#define mk                make_pair
#define vi                vector<ll>
#define vii               vector<pair<ll,ll>>
#define vpp               vector<pair<ll,pair<ll,ll>>>
#define vll               vector<ll>
#define vc                vector<char>
#define vs                vector<string>
#define mll               map<ll,ll>
#define mci               map<char,ll>
#define msi               map<string,ll>
#define in(i,a,n)         for(ll i=0;i<n;++i) cin>>a[i];
#define out(i,a,n)        for(ll i=0;i<n;++i) cout<<a[i]<<" ";
#define sz(c)             (ll)c.size()
#define len(c)            (ll)c.length()
#define hell              (ll)1000000007
#define all(c)            c.begin(), c.end()
#define rall(c)           c.rbegin(), c.rend()
#define trav(a,i)         for(auto& i: a)
#define loop(i,a,b)       for(ll i=a;i<b;i++)
#define rloop(i,a,b)      for(ll i=a;i>b;i--)
#define invect(v,n)       for(ll i=0;i<n;i++ ){ll arb;cin>>arb;v.pb(arb);}
#define inset(s,n)        forloop(n){ll aset;cin>>aset;s.insert(aset);}
#define F                 first
#define S                 second
#define pii               pair<ll,ll>
#define PB                pop_back
#define copy(a,b)         copy(all(a),back_inserter(b));
#define section(a,b,w)    set_intersection(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define union(a,b,w)      set_union(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define diff(a,b,w)       set_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define symdiff(a,b,w)    set_symmetric_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define sp(n)             setprecision(n)
#define fin               freopen( "input.txt", "r", stdin );
#define fout              freopen( "output.txt", "w", stdout );
#define outall(a)         loop(i,0,sizeof(a)/sizeof(a[0])) cout<<a[i]<<" "; cout<<endl
#define endl "\n"
const ll N=300001;
//const ll MOD = 1000 * 1000 * 1000 + 7;
const ll MOD = 998244353;
ll mod(ll n) {
    return (n % MOD + MOD) % MOD;
}

//vector<ll> v;
 ll powm(ll a,ll b, ll m){
    if(b==0) return 1;
    ll t=powm(a,b/2,m);
    if(b%2) return a*t%m*t%m;
    return t*t%m;
 }

/*ll binpow(ll a, ll b) {
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}*/

/*int bs(int a[],int low, int high, int val)
{
    int mid=(low+high)/2;
    if(low>high) return -1;
    if(a[mid]>val) bs(a,low,mid-1,val);
    else if(a[mid]<val) bs(a,mid+1,high,val);
    else return mid;
}*/

void solve(){
    int n,m,i,j,k,ans=-1;
    cin>>n>>k;
    map<int,int> mp;
    for(i=1;i<=k+1;i++){
        cout<<"? ";
        for(j=1;j<=k+1;j++){
            if(i!=j) cout<<j<<' ';
        }
        cout<<endl;
        int pos,elem;
        cin>>pos>>elem;
        mp[elem]++;
    }
    for(auto& i: mp){
        ans=max(ans,i.S);
    }
    cout<<"! "<<ans<<endl;
}

signed main(){
    //fin fout
    fast
    ll t=1; //cin>>t;
    while(t--) solve();
}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll                long long int
#define ld                long double
#define pb                push_back
#define mk                make_pair
#define vi                vector<ll>
#define vii               vector<pair<ll,ll>>
#define vpp               vector<pair<ll,pair<ll,ll>>>
#define vll               vector<ll>
#define vc                vector<char>
#define vs                vector<string>
#define mll               map<ll,ll>
#define mci               map<char,ll>
#define msi               map<string,ll>
#define in(i,a,n)         for(ll i=0;i<n;++i) cin>>a[i];
#define out(i,a,n)        for(ll i=0;i<n;++i) cout<<a[i]<<" ";
#define sz(c)             (ll)c.size()
#define len(c)            (ll)c.length()
#define hell              (ll)1000000007
#define all(c)            c.begin(), c.end()
#define rall(c)           c.rbegin(), c.rend()
#define trav(a,i)         for(auto& i: a)
#define loop(i,a,b)       for(ll i=a;i<b;i++)
#define rloop(i,a,b)      for(ll i=a;i>b;i--)
#define invect(v,n)       for(ll i=0;i<n;i++ ){ll arb;cin>>arb;v.pb(arb);}
#define inset(s,n)        forloop(n){ll aset;cin>>aset;s.insert(aset);}
#define F                 first
#define S                 second
#define pii               pair<ll,ll>
#define PB                pop_back
#define copy(a,b)         copy(all(a),back_inserter(b));
#define section(a,b,w)    set_intersection(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define union(a,b,w)      set_union(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define diff(a,b,w)       set_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define symdiff(a,b,w)    set_symmetric_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define sp(n)             setprecision(n)
#define fin               freopen( "input.txt", "r", stdin );
#define fout              freopen( "output.txt", "w", stdout );
#define outall(a)         loop(i,0,sizeof(a)/sizeof(a[0])) cout<<a[i]<<" "; cout<<endl
#define endl "\n"
const ll N=300001;
//const ll MOD = 1000 * 1000 * 1000 + 7;
const ll MOD = 998244353;
ll mod(ll n) {
    return (n % MOD + MOD) % MOD;
}

//vector<ll> v;
 ll powm(ll a,ll b, ll m){
    if(b==0) return 1;
    ll t=powm(a,b/2,m);
    if(b%2) return a*t%m*t%m;
    return t*t%m;
 }

/*ll binpow(ll a, ll b) {
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}*/

/*int bs(int a[],int low, int high, int val)
{
    int mid=(low+high)/2;
    if(low>high) return -1;
    if(a[mid]>val) bs(a,low,mid-1,val);
    else if(a[mid]<val) bs(a,mid+1,high,val);
    else return mid;
}*/

void solve(){
    int n,m,i,j,k,ans=-1;
    cin>>n>>k;
    map<int,int> mp;
    for(i=1;i<=k+1;i++){
        cout<<"?";
        for(j=0;j<=k+1;j++){
            if(i!=j) cout<<" "<<j;
        }
        cout<<endl;
        int pos,elem;
        cin>>pos>>elem;
        mp[elem]++;
    }
    for(auto& i: mp){
        ans=max(ans,i.S);
    }
    cout<<"! "<<ans<<endl;
}

signed main(){
    //fin fout
    fast
    ll t=1; //cin>>t;
    while(t--) solve();
}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll                long long int
#define ld                long double
#define pb                push_back
#define mk                make_pair
#define vi                vector<ll>
#define vii               vector<pair<ll,ll>>
#define vpp               vector<pair<ll,pair<ll,ll>>>
#define vll               vector<ll>
#define vc                vector<char>
#define vs                vector<string>
#define mll               map<ll,ll>
#define mci               map<char,ll>
#define msi               map<string,ll>
#define in(i,a,n)         for(ll i=0;i<n;++i) cin>>a[i];
#define out(i,a,n)        for(ll i=0;i<n;++i) cout<<a[i]<<" ";
#define sz(c)             (ll)c.size()
#define len(c)            (ll)c.length()
#define hell              (ll)1000000007
#define all(c)            c.begin(), c.end()
#define rall(c)           c.rbegin(), c.rend()
#define trav(a,i)         for(auto& i: a)
#define loop(i,a,b)       for(ll i=a;i<b;i++)
#define rloop(i,a,b)      for(ll i=a;i>b;i--)
#define invect(v,n)       for(ll i=0;i<n;i++ ){ll arb;cin>>arb;v.pb(arb);}
#define inset(s,n)        forloop(n){ll aset;cin>>aset;s.insert(aset);}
#define F                 first
#define S                 second
#define pii               pair<ll,ll>
#define PB                pop_back
#define copy(a,b)         copy(all(a),back_inserter(b));
#define section(a,b,w)    set_intersection(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define union(a,b,w)      set_union(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define diff(a,b,w)       set_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define symdiff(a,b,w)    set_symmetric_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define sp(n)             setprecision(n)
#define fin               freopen( "input.txt", "r", stdin );
#define fout              freopen( "output.txt", "w", stdout );
#define outall(a)         loop(i,0,sizeof(a)/sizeof(a[0])) cout<<a[i]<<" "; cout<<endl
#define endl "\n"
const ll N=300001;
//const ll MOD = 1000 * 1000 * 1000 + 7;
const ll MOD = 998244353;
ll mod(ll n) {
    return (n % MOD + MOD) % MOD;
}

//vector<ll> v;
 ll powm(ll a,ll b, ll m){
    if(b==0) return 1;
    ll t=powm(a,b/2,m);
    if(b%2) return a*t%m*t%m;
    return t*t%m;
 }

/*ll binpow(ll a, ll b) {
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}*/

/*int bs(int a[],int low, int high, int val)
{
    int mid=(low+high)/2;
    if(low>high) return -1;
    if(a[mid]>val) bs(a,low,mid-1,val);
    else if(a[mid]<val) bs(a,mid+1,high,val);
    else return mid;
}*/

void solve(){
    int n,m,i,j,k,ans,cnt=0;
    cin>>n>>k;
    vector<int> v;
    for(i=1;i<=k+1;i++){
        printf("? ");
        for(j=1;j<=k+1;j++){
            if(i!=j) printf("%d ",j);
        }
        fflush(stdout);
        int pos,elem;
        scanf("%d%d",pos,elem);
        v.pb(elem);
    }
    ans=v[0];
    for(i=0;i<sz(v);i++) ans=max(ans,v[i]);
    for(i=0;i<sz(v);i++) if(v[i]==ans) cnt++;
    printf("! %d\n",cnt); fflush(stdout);
}

signed main(){
    //fin fout
    fast
    ll t=1; //cin>>t;
    while(t--) solve();
}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll                long long int
#define ld                long double
#define pb                push_back
#define mk                make_pair
#define vi                vector<ll>
#define vii               vector<pair<ll,ll>>
#define vpp               vector<pair<ll,pair<ll,ll>>>
#define vll               vector<ll>
#define vc                vector<char>
#define vs                vector<string>
#define mll               map<ll,ll>
#define mci               map<char,ll>
#define msi               map<string,ll>
#define in(i,a,n)         for(ll i=0;i<n;++i) cin>>a[i];
#define out(i,a,n)        for(ll i=0;i<n;++i) cout<<a[i]<<" ";
#define sz(c)             (ll)c.size()
#define len(c)            (ll)c.length()
#define hell              (ll)1000000007
#define all(c)            c.begin(), c.end()
#define rall(c)           c.rbegin(), c.rend()
#define trav(a,i)         for(auto& i: a)
#define loop(i,a,b)       for(ll i=a;i<b;i++)
#define rloop(i,a,b)      for(ll i=a;i>b;i--)
#define invect(v,n)       for(ll i=0;i<n;i++ ){ll arb;cin>>arb;v.pb(arb);}
#define inset(s,n)        forloop(n){ll aset;cin>>aset;s.insert(aset);}
#define F                 first
#define S                 second
#define pii               pair<ll,ll>
#define PB                pop_back
#define copy(a,b)         copy(all(a),back_inserter(b));
#define section(a,b,w)    set_intersection(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define union(a,b,w)      set_union(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define diff(a,b,w)       set_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define symdiff(a,b,w)    set_symmetric_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define sp(n)             setprecision(n)
#define fin               freopen( "input.txt", "r", stdin );
#define fout              freopen( "output.txt", "w", stdout );
#define outall(a)         loop(i,0,sizeof(a)/sizeof(a[0])) cout<<a[i]<<" "; cout<<endl
#define endl "\n"
const ll N=300001;
//const ll MOD = 1000 * 1000 * 1000 + 7;
const ll MOD = 998244353;
ll mod(ll n) {
    return (n % MOD + MOD) % MOD;
}

//vector<ll> v;
 ll powm(ll a,ll b, ll m){
    if(b==0) return 1;
    ll t=powm(a,b/2,m);
    if(b%2) return a*t%m*t%m;
    return t*t%m;
 }

/*ll binpow(ll a, ll b) {
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}*/

/*int bs(int a[],int low, int high, int val)
{
    int mid=(low+high)/2;
    if(low>high) return -1;
    if(a[mid]>val) bs(a,low,mid-1,val);
    else if(a[mid]<val) bs(a,mid+1,high,val);
    else return mid;
}*/

void solve(){
    int n,m,i,j,k,ans,cnt=0;
    cin>>n>>k;
    vector<int> v;
    for(i=1;i<=k+1;i++){
        printf("? ");
        for(j=1;j<=k+1;j++){
            if(i!=j) printf("%d ",j);
        }
        fflush(stdout);
        int pos,elem;
        scanf("%d%d",&pos,&elem);
        v.pb(elem);
    }
    ans=v[0];
    for(i=0;i<sz(v);i++) ans=max(ans,v[i]);
    for(i=0;i<sz(v);i++) if(v[i]==ans) cnt++;
    printf("! %d\n",cnt); fflush(stdout);
}

signed main(){
    //fin fout
    fast
    ll t=1; //cin>>t;
    while(t--) solve();
}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll                long long int
#define ld                long double
#define pb                push_back
#define mk                make_pair
#define vi                vector<ll>
#define vii               vector<pair<ll,ll>>
#define vpp               vector<pair<ll,pair<ll,ll>>>
#define vll               vector<ll>
#define vc                vector<char>
#define vs                vector<string>
#define mll               map<ll,ll>
#define mci               map<char,ll>
#define msi               map<string,ll>
#define in(i,a,n)         for(ll i=0;i<n;++i) cin>>a[i];
#define out(i,a,n)        for(ll i=0;i<n;++i) cout<<a[i]<<" ";
#define sz(c)             (ll)c.size()
#define len(c)            (ll)c.length()
#define hell              (ll)1000000007
#define all(c)            c.begin(), c.end()
#define rall(c)           c.rbegin(), c.rend()
#define trav(a,i)         for(auto& i: a)
#define loop(i,a,b)       for(ll i=a;i<b;i++)
#define rloop(i,a,b)      for(ll i=a;i>b;i--)
#define invect(v,n)       for(ll i=0;i<n;i++ ){ll arb;cin>>arb;v.pb(arb);}
#define inset(s,n)        forloop(n){ll aset;cin>>aset;s.insert(aset);}
#define F                 first
#define S                 second
#define pii               pair<ll,ll>
#define PB                pop_back
#define copy(a,b)         copy(all(a),back_inserter(b));
#define section(a,b,w)    set_intersection(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define union(a,b,w)      set_union(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define diff(a,b,w)       set_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define symdiff(a,b,w)    set_symmetric_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define sp(n)             setprecision(n)
#define fin               freopen( "input.txt", "r", stdin );
#define fout              freopen( "output.txt", "w", stdout );
#define outall(a)         loop(i,0,sizeof(a)/sizeof(a[0])) cout<<a[i]<<" "; cout<<endl
#define endl "\n"
const ll N=300001;
//const ll MOD = 1000 * 1000 * 1000 + 7;
const ll MOD = 998244353;
ll mod(ll n) {
    return (n % MOD + MOD) % MOD;
}

//vector<ll> v;
 ll powm(ll a,ll b, ll m){
    if(b==0) return 1;
    ll t=powm(a,b/2,m);
    if(b%2) return a*t%m*t%m;
    return t*t%m;
 }

/*ll binpow(ll a, ll b) {
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}*/

/*int bs(int a[],int low, int high, int val)
{
    int mid=(low+high)/2;
    if(low>high) return -1;
    if(a[mid]>val) bs(a,low,mid-1,val);
    else if(a[mid]<val) bs(a,mid+1,high,val);
    else return mid;
}*/

void solve(){
    int n,m,i,j,k,ans=-1;
    cin>>n>>k;
    map<int,int> mp;
    for(i=1;i<=k+1;i++){
        cout<<"? ";
        for(j=0;j<=k+1;j++){
            if(i!=j) cout<<j<<" ";
        }
        cout<<endl;
        int pos,elem;
        cin>>pos>>elem;
        mp[elem]++;
    }
    for(auto& i: mp){
        ans=max(ans,i.S);
    }
    cout<<"! "<<ans<<endl;
}

signed main(){
    //fin fout
    fast
    ll t=1; //cin>>t;
    while(t--) solve();
}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll                long long int
#define ld                long double
#define pb                push_back
#define mk                make_pair
#define vi                vector<ll>
#define vii               vector<pair<ll,ll>>
#define vpp               vector<pair<ll,pair<ll,ll>>>
#define vll               vector<ll>
#define vc                vector<char>
#define vs                vector<string>
#define mll               map<ll,ll>
#define mci               map<char,ll>
#define msi               map<string,ll>
#define in(i,a,n)         for(ll i=0;i<n;++i) cin>>a[i];
#define out(i,a,n)        for(ll i=0;i<n;++i) cout<<a[i]<<" ";
#define sz(c)             (ll)c.size()
#define len(c)            (ll)c.length()
#define hell              (ll)1000000007
#define all(c)            c.begin(), c.end()
#define rall(c)           c.rbegin(), c.rend()
#define trav(a,i)         for(auto& i: a)
#define loop(i,a,b)       for(ll i=a;i<b;i++)
#define rloop(i,a,b)      for(ll i=a;i>b;i--)
#define invect(v,n)       for(ll i=0;i<n;i++ ){ll arb;cin>>arb;v.pb(arb);}
#define inset(s,n)        forloop(n){ll aset;cin>>aset;s.insert(aset);}
#define F                 first
#define S                 second
#define pii               pair<ll,ll>
#define PB                pop_back
#define copy(a,b)         copy(all(a),back_inserter(b));
#define section(a,b,w)    set_intersection(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define union(a,b,w)      set_union(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define diff(a,b,w)       set_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define symdiff(a,b,w)    set_symmetric_difference(a.begin(), a.end(),b.begin(), b.end(),back_inserter(w));
#define sp(n)             setprecision(n)
#define fin               freopen( "input.txt", "r", stdin );
#define fout              freopen( "output.txt", "w", stdout );
#define outall(a)         loop(i,0,sizeof(a)/sizeof(a[0])) cout<<a[i]<<" "; cout<<endl
#define endl "\n"
const ll N=300001;
//const ll MOD = 1000 * 1000 * 1000 + 7;
const ll MOD = 998244353;
ll mod(ll n) {
    return (n % MOD + MOD) % MOD;
}

//vector<ll> v;
 ll powm(ll a,ll b, ll m){
    if(b==0) return 1;
    ll t=powm(a,b/2,m);
    if(b%2) return a*t%m*t%m;
    return t*t%m;
 }

/*ll binpow(ll a, ll b) {
    ll res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}*/

/*int bs(int a[],int low, int high, int val)
{
    int mid=(low+high)/2;
    if(low>high) return -1;
    if(a[mid]>val) bs(a,low,mid-1,val);
    else if(a[mid]<val) bs(a,mid+1,high,val);
    else return mid;
}*/

void solve(){
    int n,m,i,j,k,ans=-1;
    cin>>n>>k;
    map<int,int> mp;
    for(i=1;i<=k+1;i++){
        cout<<"? ";
        for(j=1;j<=k+1;j++){
            if(i!=j) cout<<j<<" ";
        }
        cout<<endl;
        int pos,elem;
        cin>>pos>>elem;
        mp[elem]++;
    }
    for(auto& i: mp){
        ans=max(ans,i.S);
    }
    cout<<"! "<<ans<<endl;
}

signed main(){
    //fin fout
    fast
    ll t=1; //cin>>t;
    while(t--) solve();
}


#include<bits/stdc++.h>
using namespace std;

#define x first
#define y second
#define pb push_back
#define mp make_pair

#define all(a) (a).begin(), (a).end()

#define int long long

int n, k;

int A[555];

int ask(vector<int> x) {
    cout << "? ";
    for (int i = 0; i < k; i++) {
        if (i != 0) cout << " ";
        cout << x[i] + 1;
    }
    cout << endl;
    int pos, y;
    cin >> pos >> y;
    pos--;
    A[pos] = y;
    return pos;
}

int32_t main() {
    cin >> n >> k;
    vector<int> a;
    for (int i = 0; i < k; i++) a.pb(i);
    int pos1 = ask(a);
    vector<int> b;
    for (int i = 0; i < k + 1; i++) if (i != pos1) b.pb(i);
    int pos2 = ask(b);
    int ans = 1;
    if (A[pos1] < A[pos2]) {
        for (int i = 0; i < k; i++) {
            if (i == pos2) continue;
            vector<int> c;
            for (int j = 0; j < i; j++) c.pb(b[j]);
            c.pb(pos1);
            for (int j = i + 1; j < k; j++) c.pb(b[j]);
            int z = ask(c);
            if (z == pos2) ans++;
        }
    } else {
        for (int i = 0; i < k; i++) {
            if (i == pos1) continue;
            vector<int> c;
            for (int j = 0; j < i; j++) c.pb(a[j]);
            c.pb(pos2);
            for (int j = i + 1; j < k; j++) c.pb(a[j]);
            int z = ask(c);
            if (z == pos1) ans++;
        }
    }
    cout << "! " << ans << endl;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;

#define x first
#define y second
#define pb push_back
#define mp make_pair

#define all(a) (a).begin(), (a).end()

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n, k;
    cin >> n >> k;
    map<int, int> ma;
    for (int i = 0; i < k + 1; i++) {
        vector<int> x;
        for (int j = 0; j < k + 1; j++) if (j != i) x.pb(j + 1);
        cout << "? ";
        for (int j = 0; j < k; j++) {
            if (j != 0) cout << " ";
            cout << x[j];
        }
        cout << endl;
        int _, y;
        cin >> _ >> y;
        ma[y]++;
    }
    cout << "! " << ma.rbegin()->y << endl;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;

#define x first
#define y second
#define pb push_back
#define mp make_pair

#define all(a) (a).begin(), (a).end()

#define int long long

int n, k;

int A[555];

int ask(vector<int> x) {
    cout << "? ";
    for (int i = 0; i < k; i++) {
        if (i != 0) cout << " ";
        cout << x[i] + 1;
    }
    cout << endl;
    int pos, y;
    cin >> pos >> y;
    pos--;
    A[pos] = y;
    return pos;
}

int32_t main() {
    cin >> n >> k;
    vector<int> a;
    for (int i = 0; i < k; i++) a.pb(i);
    int pos1 = ask(a);
    vector<int> b;
    for (int i = 0; i < k + 1; i++) if (i != pos1) b.pb(i);
    int pos2 = ask(b);
    int ans = 1;
    if (A[pos1] < A[pos2]) {
        for (int i = 0; i < k; i++) {
            if (b[i] == pos2) continue;
            vector<int> c;
            for (int j = 0; j < i; j++) c.pb(b[j]);
            c.pb(pos1);
            for (int j = i + 1; j < k; j++) c.pb(b[j]);
            int z = ask(c);
            if (z == pos2) ans++;
        }
    } else {
        for (int i = 0; i < k; i++) {
            if (a[i] == pos1) continue;
            vector<int> c;
            for (int j = 0; j < i; j++) c.pb(a[j]);
            c.pb(pos2);
            for (int j = i + 1; j < k; j++) c.pb(a[j]);
            int z = ask(c);
            if (z == pos1) ans++;
        }
    }
    cout << "! " << ans << endl;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;

#define x first
#define y second
#define pb push_back
#define mp make_pair

#define all(a) (a).begin(), (a).end()

#define int long long

int n, k;

int A[555];

int ask(vector<int> x) {
    cout << "? ";
    assert(x.size() == k);
    for (int i = 0; i < k; i++) {
        assert(x[i] >= 0 && x[i] <= n);
    }
    for (int i = 0; i < k; i++) {
        for (int j = i + 1; j < k; j++) {
            assert(x[i] != x[j]);
        }
    }
    for (int i = 0; i < k; i++) {
        if (i != 0) cout << " ";
        cout << x[i] + 1;
    }
    cout << endl;
    int pos, y;
    cin >> pos >> y;
    pos--;
    A[pos] = y;
    return pos;
}

int32_t main() {
    cin >> n >> k;
    vector<int> a;
    for (int i = 0; i < k; i++) a.pb(i);
    int pos1 = ask(a);
    vector<int> b;
    for (int i = 0; i < k + 1; i++) if (i != pos1) b.pb(i);
    int pos2 = ask(b);
    int ans = 1;
    if (A[pos1] < A[pos2]) {
        for (int i = 0; i < k; i++) {
            if (b[i] == pos2) continue;
            vector<int> c;
            for (int j = 0; j < k; j++) {
                if (j != i) c.pb(b[j]);
            }
            c.pb(pos1);
            int z = ask(c);
            if (z == pos2) ans++;
        }
    } else {
        for (int i = 0; i < k; i++) {
            if (a[i] == pos1) continue;
            vector<int> c;
            for (int j = 0; j < k; j++) {
                if (j != i) c.pb(a[j]);
            }
            c.pb(pos2);
            int z = ask(c);
            if (z == pos1) ans++;
        }
    }
    cout << "! " << ans << endl;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;

#define x first
#define y second
#define pb push_back
#define mp make_pair

#define all(a) (a).begin(), (a).end()

int n, k;

int A[555];

int ask(vector<int> x) {
    cout << "? ";
    for (int i = 0; i < k; i++) {
        if (i != 0) cout << " ";
        cout << x[i] + 1;
    }
    cout << endl;
    int pos, y;
    cin >> pos >> y;
    pos--;
    A[pos] = y;
    return pos;
}

bool ok(vector<int> x) {
    sort(all(x));
    for (int i = 0; i < k; i++) {
        for (int j = i + 1; j < k; j++) {
            if (x[i] == x[j]) return 0;
        }
    }
    return 1;
}

int main() {
    cin >> n >> k;
    vector<int> a;
    for (int i = 0; i < k; i++) a.pb(i);
    int pos1 = ask(a);
    vector<int> b;
    for (int i = 0; i < k + 1; i++) if (i != pos1) b.pb(i);
    int pos2 = ask(b);
    int ans = 1;
    if (A[pos1] < A[pos2]) {
        for (int i = 0; i < k; i++) {
            if (b[i] == pos2) continue;
            vector<int> c;
            for (int j = 0; j < k; j++) {
                if (j != i) c.pb(b[j]);
            }
            c.pb(pos1);
            if (ok(c)) {
                int z = ask(c);
                if (z == pos2) ans++;
            }
        }
    } else {
        for (int i = 0; i < k; i++) {
            if (a[i] == pos1) continue;
            vector<int> c;
            for (int j = 0; j < k; j++) {
                if (j != i) c.pb(a[j]);
            }
            c.pb(pos2);
            if (ok(c)) {
                int z = ask(c);
                if (z == pos1) ans++;
            }
        }
    }
    cout << "! " << ans << endl;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;

#define x first
#define y second
#define pb push_back
#define mp make_pair

#define all(a) (a).begin(), (a).end()

#define int long long

int a[555];

int ask(vector<int> x) {
    cout << "? ";
    for (auto e : x) cout << e + 1 << " ";
    cout << endl;
    int pos, y;
    cin >> pos >> y;
    pos--;
    a[pos] = y;
    return pos;
}

int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n, k;
    cin >> n >> k;
    vector<int> a;
    for (int i = 0; i < k; i++) a.pb(i);
    int pos1 = ask(a);
    vector<int> b;
    for (int i = 0; i < k + 1; i++) if (i != pos1) b.pb(i);
    int pos2 = ask(b);
    int ans = 1;
    if (a[pos1] < a[pos2]) {
        for (int i = 0; i < k; i++) {
            if (i == pos2) continue;
            vector<int> c;
            for (int j = 0; j < i; j++) c.pb(b[j]);
            c.pb(pos1);
            for (int j = i + 1; j < k; j++) c.pb(b[j]);
            int z = ask(c);
            if (z == pos2) ans++;
        }
    } else {
        for (int i = 0; i < k; i++) {
            if (i == pos1) continue;
            vector<int> c;
            for (int j = 0; j < i; j++) c.pb(a[j]);
            c.pb(pos2);
            for (int j = i + 1; j < k; j++) c.pb(a[j]);
            int z = ask(c);
            if (z == pos1) ans++;
        }
    }
    cout << "! " << ans << endl;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;

#define x first
#define y second
#define pb push_back
#define mp make_pair

#define all(a) (a).begin(), (a).end()

#define int long long

int n, k;

int a[555];

int ask(vector<int> x) {
    cout << "? ";
    for (int i = 0; i < k; i++) {
        if (i != 0) cout << " ";
        cout << x[i] + 1;
    }
    cout << endl;
    int pos, y;
    cin >> pos >> y;
    pos--;
    a[pos] = y;
    return pos;
}

int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> k;
    vector<int> a;
    for (int i = 0; i < k; i++) a.pb(i);
    int pos1 = ask(a);
    vector<int> b;
    for (int i = 0; i < k + 1; i++) if (i != pos1) b.pb(i);
    int pos2 = ask(b);
    int ans = 1;
    if (a[pos1] < a[pos2]) {
        for (int i = 0; i < k; i++) {
            if (i == pos2) continue;
            vector<int> c;
            for (int j = 0; j < i; j++) c.pb(b[j]);
            c.pb(pos1);
            for (int j = i + 1; j < k; j++) c.pb(b[j]);
            int z = ask(c);
            if (z == pos2) ans++;
        }
    } else {
        for (int i = 0; i < k; i++) {
            if (i == pos1) continue;
            vector<int> c;
            for (int j = 0; j < i; j++) c.pb(a[j]);
            c.pb(pos2);
            for (int j = i + 1; j < k; j++) c.pb(a[j]);
            int z = ask(c);
            if (z == pos1) ans++;
        }
    }
    cout << "! " << ans << endl;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;

#define x first
#define y second
#define pb push_back
#define mp make_pair

#define all(a) (a).begin(), (a).end()

int n, k;

int A[555];

int ask(vector<int> x) {
    cout << "? ";
    for (int i = 0; i < k; i++) {
        if (i != 0) cout << " ";
        cout << x[i] + 1;
    }
    cout << endl;
    int pos, y;
    cin >> pos >> y;
    pos--;
    A[pos] = y;
    return pos;
}

int main() {
    cin >> n >> k;
    vector<int> a;
    for (int i = 0; i < k; i++) a.pb(i);
    int pos1 = ask(a);
    vector<int> b;
    for (int i = 0; i < k + 1; i++) if (i != pos1) b.pb(i);
    int pos2 = ask(b);
    int ans = 1;
    if (A[pos1] < A[pos2]) {
        for (int i = 0; i < k; i++) {
            if (b[i] == pos1) {
                ans++;
                continue;
            }
            if (b[i] == pos2) continue;
            vector<int> c;
            for (int j = 0; j < k; j++) {
                if (j != i) c.pb(b[j]);
            }
            c.pb(pos1);
            int z = ask(c);
            if (z == pos2) ans++;
        }
    } else {
        for (int i = 0; i < k; i++) {
            if (a[i] == pos2) {
                ans++;
                continue;
            }
            if (a[i] == pos1) continue;
            vector<int> c;
            for (int j = 0; j < k; j++) {
                if (j != i) c.pb(a[j]);
            }
            c.pb(pos2);
            int z = ask(c);
            if (z == pos1) ans++;
        }
    }
    cout << "! " << ans << endl;
    return 0;
}