#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1005;
int capat, capat1, capat2, maxim = 0;
bool ver[NMAX];
bool dmark[NMAX];
vector<int> v[NMAX];
int diameter;
int CENTROID;
void dfs(int node, int adancime, int ok) {
  ver[node] = true;
  for (int i = 0; i < v[node].size(); i++) {
    int vecin = v[node][i];
    if (ver[vecin] == 0) {
      dfs(vecin, adancime + 1, ok);
    }
  }
  if (ok == 1) {
    if (adancime == diameter / 2 + diameter % 2 + 1 and dmark[node] == 1) {
      CENTROID = node;
    }
  }
  if (adancime > maxim) {
    maxim = adancime;
    capat = node;
  }
}
int mark_diameter(int node) {
  ver[node] = true;
  for (int i = 0; i < v[node].size(); i++) {
    int vecin = v[node][i];
    if (ver[vecin] == 0) {
      if (mark_diameter(vecin) == true) {
        dmark[node] = true;
      }
    }
  }
  if (node == capat2 or dmark[node] == true) return true;
  return false;
}
pair<int, int> cen[NMAX];
int main() {
  int n, m;
  cin >> n >> m;
  int x, y;
  for (int i = 1; i <= m; i++) {
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  int k = 0;
  int rasp = 0;
  for (int i = 1; i <= n; i++) {
    maxim = 0;
    if (ver[i] == 0) {
      dfs(i, 1, 0);
      for (int i = 1; i <= n; i++) ver[i] = 0;
      capat1 = capat;
      maxim = 0;
      dfs(capat1, 1, 0);
      capat2 = capat;
      dmark[capat1] = true;
      dmark[capat2] = true;
      diameter = maxim - 1;
      if (diameter > rasp) rasp = diameter;
      for (int i = 1; i <= n; i++) ver[i] = 0;
      mark_diameter(capat1);
      for (int i = 1; i <= n; i++) ver[i] = 0;
      dfs(capat1, 1, 1);
      cen[++k].first = diameter / 2 + diameter % 2;
      cen[k].second = CENTROID;
    }
  }
  sort(cen + 1, cen + k + 1);
  for (int i = 1; i <= k - 1; i++) {
    v[cen[k].second].push_back(cen[i].second);
    v[cen[i].second].push_back(cen[k].second);
  }
  maxim = 0;
  for (int i = 1; i <= n; i++) ver[i] = 0;
  dfs(1, 1, 0);
  maxim = 0;
  for (int i = 1; i <= n; i++) ver[i] = 0;
  dfs(capat, 1, 0);
  cout << maxim - 1 << '\n';
  for (int i = 1; i <= k - 1; i++) {
    cout << cen[k].second << ' ' << cen[i].second << '\n';
  }
  return 0;
}
