#include "dango3.h"
#include <bits/stdc++.h>
using namespace std;
using ll = int; using pii = pair<ll,ll>;
mt19937 gen(9218309128309);
vector<ll> shuffle(vector<ll> v0) {
vector<pii> v1;
for (ll x: v0) {
v1.push_back({gen(),x});
}
sort(v1.begin(),v1.end());
vector<ll> v2;
for (pii p0: v1) {
v2.push_back(p0.second);
}
return v2;
}
void Solve(int N, int M) {
vector<ll> vleft;
for (ll i=1;i<=(N*M);i++) {
vleft.push_back(i);
}
vleft = shuffle(vleft);
while (vleft.size()!=0) {
if (vleft.size()==M) {
Answer(vleft);
vleft.clear();
break;
}
ll dmin = 0; ll dmax = vleft.size();
while (dmin<dmax) {
ll dq = (dmin+dmax)/2;
vector<ll> vq1;
for (ll i=0;i<dq;i++) {
vq1.push_back(vleft[i]);
}
if (Query(vq1)>=1) {
dmax = dq;
} else {
dmin = dq+1;
}
}
vector<ll> ap; ap.push_back(vleft[dmin-1]);
for (ll t=(dmin-2);t>=0;t--) {
vector<ll> vq = ap;
for (ll i=0;i<t;i++) {
vq.push_back(vleft[i]);
}
if (Query(vq)==0) {
ap.push_back(vleft[t]);
}
}
Answer(ap);
set<ll> vlset;
for (ll x: vleft) {
vlset.insert(x);
}
for (ll x: ap) {
vlset.erase(vlset.find(x));
}
vleft.clear();
for (ll x: vlset) {
vleft.push_back(x);
}
vleft = shuffle(vleft);
}
}