#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 10, MN = 1e5 + 10;
int n, m, h[MN], mh[MN];
vector<int> adj[MN], st;
int es[MN], ee[MN], deg[MN], col[MN], cmp;
bool mk[MN];
pair<int, int> C[MN];
set<pair<int, int> > edges;
void dfs(int s, int pr) {
  st.push_back(s);
  mk[s] = true;
  mh[s] = h[s];
  for (auto v : adj[s])
    if (v ^ pr) {
      if (!mk[v]) {
        h[v] = h[s] + 1;
        dfs(v, s);
        mh[s] = min(mh[s], mh[v]);
      } else
        mh[s] = min(mh[s], h[v]);
    }
  if (h[s] == mh[s]) {
    while (st.back() ^ s) {
      if (C[cmp].first == -1)
        C[cmp].first = st.back();
      else
        C[cmp].second = st.back();
      col[st.back()] = cmp;
      st.pop_back();
    }
    if (C[cmp].first == -1)
      C[cmp].first = st.back();
    else
      C[cmp].second = st.back();
    col[st.back()] = cmp;
    st.pop_back();
    ++cmp;
  }
}
void Out(int c1, int c2) {
  if (edges.count({C[c1].first, C[c2].first})) {
    if (~C[c1].second)
      cout << C[c1].second + 1 << ' ' << C[c2].first + 1 << '\n';
    else
      cout << C[c1].first + 1 << ' ' << C[c2].second + 1 << '\n';
  } else
    cout << C[c1].first + 1 << ' ' << C[c2].first + 1 << '\n';
}
int main() {
  ios_base ::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  fill(C, C + MN, make_pair(-1, -1));
  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    int a, b;
    cin >> a >> b;
    --a, --b;
    adj[a].push_back(b), adj[b].push_back(a);
    es[i] = a, ee[i] = b;
    edges.insert({es[i], ee[i]}), edges.insert({ee[i], es[i]});
  }
  if (n == 2 && m == 1) return cout << -1 << '\n', 0;
  dfs(0, -1);
  if (cmp == 1) return cout << 0 << '\n', 0;
  vector<int> vec;
  for (int i = 0; i < m; ++i)
    if (col[es[i]] ^ col[ee[i]]) ++deg[col[es[i]]], ++deg[col[ee[i]]];
  for (int i = 0; i < cmp; ++i)
    if (deg[i] == 1) vec.push_back(i);
  cout << (((int)(vec).size()) + 1) / 2 << '\n';
  for (int i = 0; i < (((int)(vec).size()) + 1) / 2; ++i) {
    int x = i + ((int)(vec).size()) / 2;
    if (x >= ((int)(vec).size())) x = ((int)(vec).size()) - 1;
    Out(vec[x], vec[i]);
  }
  return 0;
}
