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;
template <typename T>
inline void readline(T &n) {
  n = 0;
  int f = 1;
  register int ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') f = -1;
  for (; isdigit(ch); ch = getchar()) n = (n << 3) + (n << 1) + ch - '0';
  n = n * f;
}
template <typename T, typename TT>
inline void readline(T &n, TT &m) {
  readline(n);
  readline(m);
}
template <typename T, typename TT, typename TTT>
inline void readline(T &n, TT &m, TTT &l) {
  readline(n, m);
  readline(l);
}
template <typename T>
inline void readlinel(T &n) {
  n = 0;
  long long f = 1;
  register long long ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') f = -1;
  for (; isdigit(ch); ch = getchar()) n = (n << 3) + (n << 1) + ch - '0';
  n = n * f;
}
template <typename T, typename TT>
inline void readlinel(T &n, TT &m) {
  readlinel(n);
  readlinel(m);
}
template <typename T, typename TT, typename TTT>
inline void readlinel(T &n, TT &m, TTT &l) {
  readlinel(n, m);
  readlinel(l);
}
vector<string> split(const string &s, char c) {
  vector<string> v;
  stringstream ss(s);
  string x;
  while (getline(ss, x, c)) v.emplace_back(x);
  return move(v);
}
void err(vector<string>::iterator it) {}
template <typename T, typename... Args>
void err(vector<string>::iterator it, T a, Args... args) {
  cout << it->substr((*it)[0] == ' ', it->length()) << " = " << a << " ";
  err(++it, args...);
}
const int M = 1e9 + 7;
void Print(int n) { printf("%d ", n); }
void print(int n) { printf("%d\n", n); }
int length(string s) { return s.size(); }
void print(long long int n) { printf("%I64d\n", n); }
void Print(long long int n) { printf("%I64d ", n); }
void print(int n, int m) {
  printf("%d ", n);
  printf("%d ", m);
}
void print(long long int n, long long int m) {
  printf("%I64d ", n);
  printf("%I64d ", m);
}
int length(long long x) {
  int l = 0;
  for (long long i = x; i; i /= 10) l++;
  return l;
}
int dx[8] = {1, 0, -1, 0, -1, -1, 1, 1};
int dy[8] = {0, 1, 0, -1, -1, 1, -1, 1};
int tc = 1;
void print(int n, int m, int k) {
  printf("%d ", n);
  printf("%d ", m);
  printf("%d ", k);
}
void print(long long int n, long long int m, long long int k) {
  printf("%I64d ", n);
  printf("%I64d ", m);
  printf("%I64d ", k);
}
long long pow(long long a, long long n) {
  long long int res = 1;
  while (n) {
    if (n & 1) res = ((res % M) * (a % M)) % M;
    a = ((a % M) * (a % M)) % M;
    n >>= 1;
  }
  return res % M;
}
template <class T>
bool remin(T &a, const T &b) {
  return a > b ? a = b, 1 : 0;
}
template <class T>
bool remax(T &a, const T &b) {
  return a < b ? a = b, 1 : 0;
}
const int Inf = (int)2e9 + 5;
const long long int Lnf = (long long int)2e18 + 5;
const int N = 5e5 + 5;
const int NN = 1e6 + 5;
int vis[N];
int solve() {
  int n, m;
  cin >> n >> m;
  int k = m;
  int tem = 1;
  std::vector<int> v;
  for (int i = 1; i <= n; i++) {
    v.push_back(tem);
    vis[tem] = 1;
    if (i & 1) {
      tem += k;
    } else {
      tem -= k;
    }
    k--;
    if (k == 0) break;
    ;
  }
  for (int i = 1; i <= n; i++) {
    if (vis[i] == 0) v.push_back(i);
  }
  for (auto z : v) cout << z << " ";
  cout << endl;
  ;
  return 0;
}
int main() {
  int test = 1;
  while (test--) solve();
  return 0;
}
