#include <bits/stdc++.h>
using namespace std;
const long long INF = 1000000000 + 7;
const double esp = 1e-13;
const long double PI = acos(-1.0);
long long nhan(long long x, long long y, long long m) {
  long long ans = 0;
  while (y) {
    if (y % 2) ans = (ans + x) % m;
    x = x * 2 % m;
    y /= 2;
  }
  return ans;
}
long long power(long long a, long long n, long long m) {
  unsigned long long ans = 1;
  while (n) {
    if (n % 2) ans = ans * a % m;
    a = a * a % m;
    n /= 2;
  }
  return ans;
}
bool check(long long n) {
  if (n == 2) return true;
  if (n < 2 || n % 2 == 0) return false;
  long long p[3] = {3, 5, 7};
  long long a, d;
  int r, s;
  d = n - 1;
  s = 0;
  while (d % 2 == 0) {
    d /= 2;
    s++;
  }
  for (int i = 0; i <= 2; i++) {
    if (n == p[i]) return true;
    if (n % p[i] == 0) return false;
    a = power(p[i], d, n);
    if (a != 1) {
      for (r = 0; r < s && a != n - 1; r++) a = a * a % n;
      if (r == s) return false;
    }
  }
  return true;
}
long long phi(long long n) {
  long long ans = n;
  long long n2 = (long long)sqrt(n);
  for (int i = 2; i <= n2; i++)
    if (n % i == 0) {
      while (n % i == 0) n /= i;
      ans -= ans / i;
    }
  if (n > 1) ans -= ans / n;
  return ans;
}
int n, p, test, vt;
int d[200000 + 10];
vector<int> a[200000 + 10];
void bfs(int u) {
  queue<int> q;
  while (!q.empty()) q.pop();
  q.push(u);
  bool f[200000 + 10];
  memset(f, true, sizeof(f));
  f[u] = false;
  d[u] = 0;
  while (!q.empty()) {
    int u = q.front();
    for (long long i = 0; i < a[u].size(); i++)
      if (f[a[u][i]]) {
        q.push(a[u][i]);
        d[a[u][i]] = d[u] + 1;
        f[a[u][i]] = false;
      }
    q.pop();
  }
  vt = 1;
  for (int i = 1; i <= n; i++)
    if (d[vt] < d[i]) vt = i;
}
void solve() {
  cin >> n >> p;
  for (int i = 2; i <= p + 1; i++) {
    a[1].push_back(i);
    a[i].push_back(1);
  }
  for (int i = p + 2; i <= n; i++) {
    a[i].push_back(i - p);
    a[i - p].push_back(i);
  }
  bfs(1);
  bfs(vt);
  cout << d[vt] << "\n";
  for (int i = 1; i <= n; i++) {
    for (long long j = 0; j < a[i].size(); j++)
      if (a[i][j] > i) cout << i << " " << a[i][j] << "\n";
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie();
  test = 1;
  while (test--) {
    solve();
  }
}
