#include <bits/stdc++.h>
using namespace std;
set<int> E[200005];
vector<pair<int, int> > sol;
int d1, d2;
void findEdges(int u, int d) {
  if (d > d1) {
    d2 = d1;
    d1 = d;
  } else if (d > d2) {
    d2 = d;
  }
  set<int>::iterator it = E[u].begin();
  while (it != E[u].end()) {
    int v = *it;
    sol.push_back(make_pair(u, v));
    findEdges(v, d + 1);
    it++;
  }
}
void solve_test() {
  int n, k;
  cin >> n >> k;
  for (int i = 1; i <= k; i++) E[1].insert(i + 1);
  int m = n - k - 1;
  int id = k + 2;
  while (m > 0) {
    int ady = *E[1].begin();
    E[1].erase(ady);
    E[1].insert(id);
    E[id].insert(ady);
    id++;
    m--;
  }
  d1 = d2 = 0;
  findEdges(1, 0);
  cout << d1 + d2 << '\n';
  for (int i = 0; i < (int)sol.size(); i++)
    cout << sol[i].first << " " << sol[i].second << '\n';
}
void solve() { solve_test(); }
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  solve();
  return 0;
}
