#include <bits/stdc++.h>
inline long long rd() {
  long long _x = 0;
  int _ch = getchar(), _f = 1;
  for (; !isdigit(_ch) && (_ch != '-') && (_ch != EOF); _ch = getchar())
    ;
  if (_ch == '-') {
    _f = 0;
    _ch = getchar();
  }
  for (; isdigit(_ch); _ch = getchar()) _x = _x * 10 + _ch - '0';
  return _f ? _x : -_x;
}
void write(long long _x) {
  if (_x >= 10)
    write(_x / 10), putchar(_x % 10 + '0');
  else
    putchar(_x + '0');
}
inline void wrt(long long _x, char _p) {
  if (_x < 0) putchar('-'), _x = -_x;
  write(_x);
  if (_p) putchar(_p);
}
int n, k;
std::vector<std::pair<int, int> > vt;
bool tag[505];
bool vis[505];
void query(int x, int y) {
  std::vector<int> tot;
  if (x) tot.push_back(x), tot.push_back(y);
  for (int j = 1; j <= n; j++) {
    if (!tag[j] && tot.size() < k) tot.push_back(j);
  }
  printf("?");
  for (auto j : tot) printf(" %d", j);
  printf("\n");
  fflush(stdout);
}
int last, nxt;
bool res[505];
int a[505];
int main() {
  n = rd(), k = rd();
  if (k == 1) {
    printf("! 1\n");
    fflush(stdout);
    return 0;
  }
  for (int i = 1; i <= n - k + 1; i++) {
    query(0, 0);
    int pos = rd(), val = rd();
    a[pos] = val;
    vt.push_back(std::make_pair(pos, val));
    tag[pos] = 1;
  }
  last = vt.back().first;
  std::sort(vt.begin(), vt.end());
  if (last == vt[0].first)
    nxt = vt[1].first;
  else
    nxt = vt[0].first;
  for (int i = 1; i < k; i++) {
    for (int j = 1; j <= n; j++)
      if (!tag[j] && (!vis[j])) {
        vis[j] = 1;
        tag[j] = 1;
        query(last, nxt);
        int pos = rd(), val = rd();
        if (pos == last) {
          if (a[nxt] < a[last]) res[j] = 1;
        } else {
          if (a[nxt] > a[last]) res[j] = 1;
        }
        tag[j] = 0;
      }
  }
  int result = 0;
  for (int i = 1; i <= n; i++) result += res[i];
  printf("! %d\n", result + 1);
  fflush(stdout);
}
