#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
int N, M;
int vis[MAXN];
int bb[MAXN];
vector<int> g[MAXN];
int l;
map<int, int> mp;
void dfs(int t) {
  vis[t] = 1;
  bb[l++] = t;
  for (int i = 0; i < ((int)(g[t].size())); i++) {
    if (!vis[g[t][i]]) {
      dfs(g[t][i]);
    }
  }
}
int main() {
  int i, j, u, v;
  while (scanf("%d %d", &N, &M) != EOF) {
    for (i = 0; i < (N); ++i) g[i].clear();
    mp.clear();
    for (i = 0; i < (M); ++i) {
      scanf("%d %d", &u, &v);
      if (u > v) swap(u, v);
      mp[u * 100000 + v] = 1;
      mp[v * 100000 + u] = 1;
      g[u].push_back(v);
      g[v].push_back(u);
    }
    int comp = 0;
    l = 0;
    memset(vis, 0, sizeof(vis));
    for (i = 1; i <= N; i++) {
      if (!vis[i]) {
        comp++;
        dfs(i);
      }
    }
    if (comp == 1 && ((N == 4 && N == M) || N <= 3)) {
      printf("-1\n");
      continue;
    }
    memset(vis, 0, sizeof(vis));
    int ub = M, lb = 0;
    if (M > 10000) {
      ub -= 1000;
    }
    for (j = 1; j < 1000; j++) {
      random_shuffle(bb + lb, bb + N);
      bb[N] = bb[0];
      for (i = lb; i < M; i++) {
        if (mp.find(bb[i] * 100000 + bb[i + 1]) != mp.end()) {
          break;
        }
      }
      if (i == M) break;
      if (M > 10000) lb = min(i, ub);
    }
    if (j == 1000)
      puts("-1");
    else {
      for (int i = 0; i < M; i++) {
        printf("%d %d\n", bb[i], bb[i + 1]);
      }
    }
  }
  return 0;
}
