#include <bits/stdc++.h>
using namespace std;
const int maxN = 1000 * 110;
long long dist[maxN], q[maxN], mtrx[10][10], n, m;
vector<long long> g[maxN];
int l, r;
void bfs(int source) {
  int now, i;
  q[r++] = source;
  dist[source] = 0;
  while (l < r) {
    now = q[l++];
    for (i = 0; i < g[now].size(); i++)
      if (dist[g[now][i]] == -1) {
        dist[g[now][i]] = dist[now] + 1;
        q[r++] = g[now][i];
      }
  }
}
int kiarash() {
  vector<pair<int, int> > edges;
  int degree[10], found = 0, k, sum;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < g[i].size(); j++) mtrx[i][g[i][j]] = 1;
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++)
      if (mtrx[i][j] == 0) edges.push_back(make_pair(i, j));
  k = edges.size();
  for (int i = 0; !found && i < (1 << k); i++) {
    fill(degree, degree + 10, 0);
    sum = 0;
    for (int j = 0; j < k; j++)
      if (i & (1 << j)) {
        degree[edges[j].first]++;
        degree[edges[j].second]++;
        if (max(degree[edges[j].first], degree[edges[j].second]) > 2)
          sum = m + 1;
        sum++;
      }
    if (sum == m) {
      found = i + 1;
      break;
    }
  }
  if (!found)
    cout << -1 << endl;
  else {
    found--;
    for (int i = 0; i < k; i++)
      if (found & (1 << i))
        cout << edges[i].first + 1 << " " << edges[i].second + 1 << endl;
  }
  return 0;
}
int main() {
  cin >> n >> m;
  for (int j = 0; j < m; j++) {
    int l, r;
    scanf("%d %d", &l, &r);
    l--;
    r--;
    g[l].push_back(r);
    g[r].push_back(l);
  }
  cerr << endl;
  if (n < 7) return kiarash();
  fill(dist, dist + n, -1);
  for (int i = 0; i < n; i++)
    if (dist[i] == -1) bfs(i);
  for (int i = 0; i < m; i++)
    cout << q[i % n] + 1 << " " << q[(i + 3) % n] + 1 << endl;
}
