#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> vec[100010];
vector<int> vv[100010];
int x[100010], y[100010];
set<int> st;
int in[100010];
bool check1() {
  int cnt = 0;
  queue<int> q;
  for (int i = 1; i <= n; ++i) q.push(i);
  int u, v;
  for (int i = 1; i <= n; ++i)
    if (in[i] < 2) {
      for (int j = 0; !q.empty() && j < 100;) {
        v = q.front();
        q.pop();
        if (in[v] >= 2) continue;
        if (v == i) {
          q.push(v);
          ++j;
          continue;
        }
        int c = 0;
        for (int l = 0; l < vec[i].size(); ++l)
          if (vec[i][l] == v) {
            c = 1;
            q.push(v);
            break;
          }
        for (int l = 0; l < vv[i].size(); ++l)
          if (vv[i][l] == v) {
            c = 1;
            q.push(v);
            break;
          }
        if (c) {
          ++j;
          continue;
        }
        in[i]++;
        in[v]++;
        vv[i].push_back(v);
        vv[v].push_back(i);
        x[cnt] = i, y[cnt++] = v;
        if (cnt == m) return 1;
        if (in[v] < 2) q.push(v);
        if (in[i] == 2) break;
        ++j;
      }
    }
  return 0;
}
bool can(int u, int v) {
  for (int i = 0; i < vec[u].size(); ++i)
    if (vec[u][i] == v) return 0;
  return 1;
}
void get(int u) {
  int cnt = 0;
  set<int>::iterator it = st.begin();
  vv[u].clear();
  while (it != st.end()) {
    vv[u].push_back(*it);
    it++;
    cnt++;
    if (cnt > 10) break;
  }
}
int dfs(int dep, int u) {
  if (dep == m) {
    return 1;
  }
  st.erase(u);
  int v;
  get(u);
  for (int i = 0; i < vv[u].size(); ++i) {
    v = vv[u][i];
    if (can(u, v)) {
      x[dep] = u, y[dep] = v;
      if (dfs(dep + 1, v)) return 1;
    }
  }
  if (n == m && dep == n - 1) {
    if (can(u, 1)) {
      x[dep] = u, y[dep] = 1;
      return 1;
    }
  }
  st.insert(u);
  return 0;
}
bool check() {
  for (int i = 1; i <= n; ++i) st.insert(i);
  if (n >= 5)
    return dfs(0, 1);
  else {
    return check1();
  }
}
int main() {
  cin >> n >> m;
  int u, v;
  for (int i = 0; i < m; ++i) {
    scanf("%d%d", &u, &v);
    vec[u].push_back(v);
    vec[v].push_back(u);
  }
  if (check()) {
    for (int i = 0; i < m; ++i) printf("%d %d\n", x[i], y[i]);
  } else
    puts("-1");
}
