#include <bits/stdc++.h>
using namespace std;
int n, m, st, en, num, ans;
struct Point {
  int x, y;
} B[2010], R[2010];
int cmp_B(Point a, Point b) { return a.x != b.x ? a.x < b.x : a.y < b.y; }
int cmp_R(Point a, Point b) { return a.y != b.y ? a.y < b.y : a.x < b.x; }
int vis[2010][2010], qe[2010];
int test(int tm) {
  int L = 2 * tm;
  memset(vis, 0, sizeof vis);
  for (int i = 1; i <= n; i++) {
    int y1 = B[i].y - L, y2 = B[i].y + L;
    for (int j = i + 1; j <= n; j++) {
      if (B[j].x != B[i].x) break;
      if (B[j].y - B[i].y <= 2 * L)
        y2 = B[j].y + L, i = j;
      else
        break;
    }
    int cnt_qe = 0;
    for (int j = 1; j <= m; j++)
      if (y1 <= R[j].y && R[j].y <= y2) {
        int x1 = R[j].x - L, x2 = R[j].x + L;
        for (int k = j + 1; k <= m; k++) {
          if (R[k].y != R[j].y) break;
          if (R[k].x - R[j].x <= 2 * L)
            x2 = R[k].x + L, j = k;
          else
            break;
        }
        if (x1 <= B[i].x && B[i].x <= x2) qe[++cnt_qe] = j;
      }
    for (int j = 1; j <= cnt_qe; j++)
      for (int k = j + 1; k <= cnt_qe; k++) {
        if (vis[qe[j]][qe[k]]) return true;
        vis[qe[j]][qe[k]] = 1;
      }
  }
  return false;
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d %d", &B[i].x, &B[i].y);
    B[i].x += B[i].y;
    B[i].y = B[i].x - 2 * B[i].y;
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d %d", &R[i].x, &R[i].y);
    R[i].x += R[i].y;
    R[i].y = R[i].x - 2 * R[i].y;
  }
  sort(B + 1, B + n + 1, cmp_B);
  sort(R + 1, R + m + 1, cmp_R);
  st = 0;
  en = 2000100;
  num = 30;
  if (!test(en)) {
    puts("Poor Sereja!");
    return 0;
  }
  while (num--) {
    ans = (st + en) >> 1;
    if (test(ans))
      en = ans;
    else
      st = ans;
  }
  printf("%d", en);
}
