#include <bits/stdc++.h>
using namespace std;
int n, m, dis[3005][3005];
pair<int, int> in[3005][3], out[3005][3];
int fst[3005], vv[50020], nxt[50020], e;
int q[50020];
void init() {
  memset(fst, -1, sizeof fst);
  e = 0;
}
void add(int u, int v) { vv[e] = v, nxt[e] = fst[u], fst[u] = e++; }
void bfs(int s) {
  int head = 0, tail = 0;
  q[tail++] = s;
  dis[s][s] = 0;
  while (head < tail) {
    int u = q[head++];
    for (int i = fst[u]; ~i; i = nxt[i]) {
      int v = vv[i];
      if (dis[s][v] > dis[s][u] + 1) {
        dis[s][v] = dis[s][u] + 1;
        q[tail++] = v;
      }
    }
  }
}
void update(int d, int u, int v) {
  if (d >= out[u][0].first)
    out[u][2] = out[u][1], out[u][1] = out[u][0], out[u][0] = make_pair(d, v);
  else if (d >= out[u][1].first)
    out[u][2] = out[u][1], out[u][1] = make_pair(d, v);
  else if (d >= out[u][2].first)
    out[u][2] = make_pair(d, v);
  else
    ;
  if (d >= in[v][0].first)
    in[v][2] = in[v][1], in[v][1] = in[v][0], in[v][0] = make_pair(d, u);
  else if (d >= in[v][1].first)
    in[v][2] = in[v][1], in[v][1] = make_pair(d, u);
  else if (d >= in[v][2].first)
    in[v][2] = make_pair(d, u);
  else
    ;
}
int main() {
  scanf("%d%d", &n, &m);
  init();
  for (int i = 0; i < m; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    add(u, v);
  }
  memset(dis, 0x3f, sizeof dis);
  for (int i = 1; i <= n; ++i) {
    bfs(i);
    for (int j = 0; j < 3; ++j)
      in[i][j] = make_pair(-1, -1), out[i][j] = make_pair(-1, -1);
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      if (i == j || dis[i][j] == 0x3f3f3f3f) continue;
      update(dis[i][j], i, j);
    }
  }
  int ans[4], mx = -1;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j) {
      if (i == j || dis[i][j] == 0x3f3f3f3f) continue;
      int id1 = -1, id2 = -1;
      for (int k = 0; k < 3; ++k)
        if (in[i][k].second != j) {
          id1 = in[i][k].second;
          break;
        }
      for (int k = 0; k < 3; ++k)
        if (out[j][k].second != i && out[j][k].second != id1) {
          id2 = out[j][k].second;
          break;
        }
      if (id1 != -1 && id2 != -1) {
        int t = dis[id1][i] + dis[i][j] + dis[j][id2];
        if (t > mx) {
          mx = t;
          ans[0] = id1, ans[1] = i, ans[2] = j, ans[3] = id2;
        }
      }
      id1 = -1, id2 = -1;
      for (int k = 0; k < 3; ++k)
        if (out[j][k].second != i) {
          id2 = out[j][k].second;
          break;
        }
      for (int k = 0; k < 3; ++k)
        if (in[i][k].second != j && in[i][k].second != id2) {
          id1 = in[i][k].second;
          break;
        }
      if (id1 != -1 && id2 != -1) {
        int t = dis[id1][i] + dis[i][j] + dis[j][id2];
        if (t > mx) {
          mx = t;
          ans[0] = id1, ans[1] = i, ans[2] = j, ans[3] = id2;
        }
      }
    }
  for (int i = 0; i < 4; ++i) printf("%d ", ans[i]);
  puts("");
  return 0;
}
