#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void amin(T &x, const T &y) {
  if (y < x) x = y;
}
template <class T>
inline void amax(T &x, const T &y) {
  if (x < y) x = y;
}
template <class Iter>
void rprintf(const char *fmt, Iter begin, Iter end) {
  for (bool sp = 0; begin != end; ++begin) {
    if (sp)
      putchar(' ');
    else
      sp = true;
    printf(fmt, *begin);
  }
  putchar('\n');
}
int N, K;
char S[555];
pair<int, int> query(vector<int> idx) {
  for (__typeof((idx).begin()) e = (idx).begin(), e_end = (idx).end();
       e != e_end; ++e)
    (*e)++;
  printf("? ");
  rprintf("%d", idx.begin(), idx.end());
  fflush(stdout);
  int a, b;
  scanf("%d%d", &a, &b);
  return make_pair(a - 1, b);
}
void MAIN() {
  scanf("%d%d", &N, &K);
  vector<int> idx;
  for (int i = 0, i_len = (K); i < i_len; ++i) idx.push_back(i);
  pair<int, int> a = query(idx);
  vector<int> idx2 = idx;
  idx2[a.first] = K;
  pair<int, int> b = query(idx2);
  for (int i = 0, i_len = (K); i < i_len; ++i) {
    if (i == a.first) continue;
    vector<int> idx3;
    for (int j = 0, j_len = (K + 1); j < j_len; ++j) {
      if (j != i) idx3.push_back(j);
    }
    pair<int, int> c = query(idx3);
    if (a.second < b.second) {
      if (c == a)
        S[i] = '+';
      else
        S[i] = '-';
    } else {
      if (c == a)
        S[i] = '-';
      else
        S[i] = '+';
    }
  }
  int ans = count(S, S + K, '-') + 1;
  printf("! %d\n", ans);
  fflush(stdout);
}
int main() {
  int TC = 1;
  for (int tc = 0, tc_len = (TC); tc < tc_len; ++tc) MAIN();
  return 0;
}
