Permutation p is an ordered set of integers p1, p2, ..., pn, consisting of n distinct positive integers not larger than n. We'll denote as n the length of permutation p1, p2, ..., pn.

Your task is to find such permutation p of length n, that the group of numbers |p1 - p2|, |p2 - p3|, ..., |pn - 1 - pn| has exactly k distinct elements.

Input

The single line of the input contains two space-separated positive integers n, k (1 ≤ k < n ≤ 105).

Output

Print n integers forming the permutation. If there are multiple answers, print any of them.

Examples

Input

3 2


Output

1 3 2


Input

3 1


Output

1 2 3


Input

5 2


Output

1 3 2 4 5

Note

By |x| we denote the absolute value of number x. 
#include <bits/stdc++.h>
using namespace std;
bool prime(unsigned long long n) {
  for (unsigned long long i = 2; i <= sqrt(n); i++)
    if (n % i == 0) return false;
  return true;
}
bool cmpPairAscendingByFirst(const pair<long long, long long> &a,
                             const pair<long long, long long> &b) {
  return a.first < b.first;
}
bool cmpPairDescendingByFirst(const pair<long long, long long> &a,
                              const pair<long long, long long> &b) {
  return a.first > b.first;
}
bool cmpPairAscendingBySecond(const pair<long long, long long> &a,
                              const pair<long long, long long> &b) {
  return a.second < b.second;
}
bool cmpPairDescendingBySecond(const pair<long long, long long> &a,
                               const pair<long long, long long> &b) {
  return a.second > b.second;
}
bool isChar(char c) { return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); }
unsigned long long fac(unsigned long long n) {
  return (n == 0) ? 1 : n * fac(n - 1);
}
long long problemID(string s) { return s[0] - 'A' + 1; }
typedef struct {
  string name;
  vector<long long> scores;
} fteam;
bool compareByTotalAccepted(const fteam &team1, const fteam &team2) {
  long long totalTeam1 = team1.scores[0] / 1000;
  long long totalTeam2 = team2.scores[0] / 1000;
  return totalTeam1 < totalTeam2;
}
bool compareByTotalTime(const fteam &team1, const fteam &team2) {
  return team1.scores[0] > team2.scores[0];
}
bool cmp_pair_first(const pair<long long, long long> &a,
                    const pair<long long, long long> &b) {
  return a.first < b.first;
}
bool cmp_pair_second(const pair<long long, long long> &a,
                     const pair<long long, long long> &b) {
  return (a.second < b.second) && (a.first == b.first);
}
typedef struct {
  long money;
  long ad;
  int num;
} frd;
typedef struct {
  long rooms;
  long price;
  long ad;
  int num;
} apartment;
bool cmp_ap(const apartment &a1, const apartment &a2) { return a1.ad > a2.ad; }
bool cmp_fr(const frd &f1, const frd &f2) { return f1.ad > f2.ad; }
int find_good_ap(const vector<apartment> &a, long money1, long money2) {
  for (int i = 0; i < a.size(); i++) {
    long price_for_each = a[i].price / 2;
    if (a[i].price % 2 == 1) {
      price_for_each++;
    }
    if (money1 >= price_for_each && money2 >= price_for_each && a[i].rooms == 2)
      return i;
  }
  return -1;
}
int main() {
  ios_base::sync_with_stdio(false);
  long n, k;
  cin >> n >> k;
  vector<long> v(n, 0);
  long b = 1, e = n;
  for (long i = 0; i < k; i++) {
    if (i % 2 == 0)
      v[i] = b++;
    else
      v[i] = e--;
  }
  for (long i = k; i < n; i++) {
    if (k % 2 == 1)
      v[i] = b++;
    else
      v[i] = e--;
  }
  for (auto n : v) cout << n << " ";
  cout << endl;
  return 0;
}
