#include <bits/stdc++.h>
using namespace std;
int const N = 100100;
vector<int> v[N];
int l[N], r[N];
int n, m;
bool vis[N];
int linkL[N], linkR[N];
bool dfs(int u, int s, int d, int o) {
  int sz = v[u].size();
  linkR[linkL[u]] = linkR[u];
  linkL[linkR[u]] = linkL[u];
  for (int i = linkR[0]; i != n + 1; i = linkR[i]) {
    bool f = 1;
    for (int j = 0; j < (sz); ++j)
      if (i == v[u][j]) f = 0;
    if (!f) continue;
    r[u] = i, l[i] = u;
    if (o == 1) return 1;
    if (dfs(i, s, d + 1, o - 1)) return 1;
  }
  int ss = v[s].size();
  for (int i = linkR[0]; i != n + 1; i = linkR[i]) {
    bool f = 1;
    for (int j = 0; j < (ss); ++j)
      if (i == v[s][j]) f = 0;
    if (!f) continue;
    l[s] = i, r[i] = s;
    if (o == 1) return 1;
    if (dfs(i, u, d + 1, o - 1)) return 1;
  }
  if (d > 2) {
    bool f = 1;
    for (int i = 0; i < (sz); ++i)
      if (v[u][i] == s) f = 0;
    if (f) {
      l[s] = u, r[u] = s;
      if (o == 1) return 1;
      for (int i = linkR[0]; i != n + 1; i = linkR[i]) {
        if (dfs(i, i, 1, o - 1)) return 1;
      }
    }
  }
  linkR[linkL[u]] = linkL[linkR[u]] = u;
  return 0;
}
int main() {
  scanf("%d%d", &n, &m);
  int a, b;
  for (int i = 0; i < (m); ++i) {
    scanf("%d%d", &a, &b);
    v[a].push_back(b), v[b].push_back(a);
  }
  for (int i = 1; i <= (n); ++i) linkR[i] = i + 1, linkL[i] = i - 1;
  linkR[0] = 1, linkL[n + 1] = n;
  if (dfs(1, 1, 1, m)) {
    memset(vis, (0), sizeof vis);
    vis[0] = 1;
    for (int i = 1; i <= (n); ++i) {
      if (!vis[l[i]]) printf("%d %d\n", i, l[i]);
      if (!vis[r[i]]) printf("%d %d\n", i, r[i]);
      vis[i] = 1;
    }
  } else
    puts("-1");
  return 0;
}
