#include <bits/stdc++.h>
using namespace std;
template <class T>
ostream &operator<<(ostream &s, pair<T, long long int> a) {
  s << a.first << ' ' << a.second;
  return s;
}
vector<int> adj[200005];
bool vis[200005];
void dfs(long long int ind, vector<long long int> &cc, long long int par = -1) {
  cc.push_back(ind);
  for (auto x : adj[ind])
    if (x != par) dfs(x, cc, ind);
}
pair<long long int, long long int> dfs2(long long int ind,
                                        long long int par = -1) {
  pair<long long int, long long int> d = {0, ind};
  for (auto x : adj[ind])
    if (x != par) {
      pair<long long int, long long int> y = dfs2(x, ind);
      if (d.first < y.first) d = y;
    }
  d.first++;
  return d;
}
long long int get_ans(long long int ind) {
  vector<long long int> cc;
  dfs(ind, cc);
  pair<long long int, long long int> ans = {2000000000, -1};
  for (auto x : cc)
    vis[x] = 1,
    ans = min(ans, pair<long long int, long long int>(dfs2(x).first, x));
  return ans.second;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  long long int T = 1;
  for (long long int qq = 1; qq <= T; qq++) {
    long long int n, m;
    cin >> n >> m;
    for (int i = 0; i < m; i++) {
      long long int x, y;
      cin >> x >> y;
      adj[x].push_back(y);
      adj[y].push_back(x);
    }
    vector<pair<long long int, long long int> > cen;
    long long int d = 0;
    for (int i = 1; i <= n; i++) {
      if (vis[i] == 0) {
        cen.push_back(pair<long long int, long long int>(0, get_ans(i)));
        pair<long long int, long long int> x = dfs2(cen.back().second);
        cen.back().first = x.first;
        d = max(d, dfs2(x.second).first - 1);
      }
    }
    sort(cen.begin(), cen.end(),
         greater<pair<long long int, long long int> >());
    if (cen.size() > 1) d = max(d, cen[0].first + cen[1].first - 1);
    if (cen.size() > 2) d = max(d, cen[1].first + cen[2].first);
    cout << d << endl;
    for (int i = 1; i < cen.size(); i++)
      cout << cen[0].second << ' ' << cen[i].second << endl;
  }
  return 0;
}
