#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000;
const int MAXM = MAXN * MAXN * 2;
int n, k;
int cnt[MAXN + 10];
struct et {
  int t;
  et* n;
  et() {}
  et(int _t, et* _n) : t(_t), n(_n) {}
} * e[MAXN + 10], store[MAXM + 10], *loc;
bool fun(int id, int left) {
  if (id > n) return true;
  if (left < 0) return false;
  if (cnt[id]) return fun(id + 1, left);
  int cnter = 0;
  for (et* i = e[id]; i; i = i->n) cnter += !cnt[i->t];
  for (et* i = e[id]; i; i = i->n) cnt[i->t]++;
  if (fun(id + 1, left - cnter)) return true;
  for (et* i = e[id]; i; i = i->n) cnt[i->t]--;
  cnt[id]++;
  if (cnter > 1 && fun(id + 1, left - 1)) return true;
  cnt[id]--;
  return false;
}
inline long long sqr(int x) { return x * (long long)x; }
int x[MAXN + 10], y[MAXN + 10];
long long storeD[MAXN + 10][MAXN + 10];
bool can(long long ddd) {
  memset(cnt, 0, sizeof(cnt));
  memset(e, 0, sizeof(e));
  loc = store;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (storeD[i][j] > ddd) e[i] = new (loc++) et(j, e[i]);
  return fun(1, k);
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &x[i], &y[i]);
  }
  vector<long long> ds;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++)
      ds.push_back(storeD[i][j] = storeD[j][i] =
                       sqr(x[i] - x[j]) + sqr(y[i] - y[j]));
  sort(ds.begin(), ds.end());
  ds.erase(unique(ds.begin(), ds.end()), ds.end());
  int l = 0, r = ds.size() - 1, mid = (l + r) >> 1;
  while (l < r) {
    if (can(ds[mid]))
      r = mid;
    else
      l = mid + 1;
    mid = (l + r) >> 1;
  }
  can(ds[mid]);
  for (int i = 1; i <= n; i++)
    if (cnt[i]) k--, printf("%d ", i);
  for (int i = 1; k && i <= n; i++)
    if (!cnt[i]) k--, printf("%d ", i);
  return 0;
}
