#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100100;
int N, M;
vector<int> conn[MAXN];
bool adj[10][10];
bool vis[MAXN];
int deg[10];
int ar[MAXN];
int pa[10];
int pb[10];
int numed;
void prec() {
  for (int j = 0; j < numed; ++j) {
    int a = 2, b = 1;
    for (int k = 0; k < j; ++k) {
      if (b + 1 >= a) {
        ++a;
        b = 1;
      } else {
        ++b;
      }
    }
    pa[j] = a;
    pb[j] = b;
  }
}
void go6() {
  numed = N * (N - 1) / 2;
  prec();
  for (int i = 1; i <= N; ++i) {
    for (typeof((conn[i]).begin()) j = (conn[i]).begin(), _j = (conn[i]).end();
         j != _j; ++j) {
      adj[i][*j] = true;
    }
  }
  bool fnd = false;
  for (int i = 0; i < (1 << numed); ++i) {
    int cnt = 0;
    bool bad = false;
    for (int j = 1; j <= N; ++j) {
      deg[j] = 0;
    }
    for (int j = 0; j < numed; ++j) {
      if ((i >> j) & 1) {
        int a = pa[j];
        int b = pb[j];
        if (adj[a][b]) {
          bad = true;
          break;
        }
        ++deg[a];
        ++deg[b];
        if (deg[a] > 2 || deg[b] > 2) {
          bad = true;
          break;
        }
        ++cnt;
      }
    }
    if (bad) continue;
    if (cnt != M) continue;
    fnd = true;
    for (int j = 0; j < numed; ++j) {
      if ((i >> j) & 1) {
        int a = pa[j], b = pb[j];
        printf("%d %d\n", a, b);
      }
    }
    break;
  }
  if (!fnd) {
    printf("-1\n");
  }
}
int cnt;
bool dfs(int x, int prv = -1) {
  if (vis[x]) return true;
  vis[x] = true;
  ++cnt;
  for (typeof((conn[x]).begin()) i = (conn[x]).begin(), _i = (conn[x]).end();
       i != _i; ++i) {
    if (*i != prv && dfs(*i, x)) {
      return true;
    }
  }
  return false;
}
int main() {
  scanf("%d %d", &N, &M);
  for (int i = 0; i < M; ++i) {
    int a, b;
    scanf("%d %d", &a, &b);
    conn[a].push_back(b);
    conn[b].push_back(a);
  }
  if (N <= 6) {
    go6();
  } else {
    if (M > N) {
      printf("-1\n");
      return 0;
    }
    int pos = 0;
    for (int i = 1; i <= N; ++i) {
      if (!vis[i]) {
        cnt = 0;
        if (dfs(i)) {
          int a = i;
          int b = conn[a][0];
          int cur = pos;
          int end = pos + cnt;
          bool up = true;
          do {
            ar[cur] = a;
            int c = conn[b][0];
            if (c == a) c = conn[b][1];
            a = b;
            b = c;
            if (up) {
              if (cur + 2 < end)
                cur += 2;
              else {
                if (cur + 1 < end)
                  cur += 1;
                else
                  cur -= 1;
                up = false;
              }
            } else {
              cur -= 2;
            }
          } while (a != i);
        } else {
          int a = i;
          int b = -1;
          while (int((conn[a]).size()) == 2) {
            int p = a;
            if (conn[a][0] == b)
              a = conn[a][1];
            else
              a = conn[a][0];
            b = p;
          }
          int cur = pos;
          b = -1;
          while (true) {
            ar[cur] = a;
            ++cur;
            if (int((conn[a]).size()) == 0) break;
            if (int((conn[a]).size()) == 1 && b != -1) break;
            int p = a;
            if (conn[a][0] == b)
              a = conn[a][1];
            else
              a = conn[a][0];
            b = p;
          }
        }
        pos += cnt;
      }
    }
    for (int i = 0; i < M; ++i) {
      printf("%d %d\n", ar[i], ar[(i + 3) % N]);
    }
  }
  return 0;
}
