#include <bits/stdc++.h>
using namespace std;
int n, m;
class seg {
 public:
  int a, l, r;
  seg() {}
  seg(int _a, int _l, int _r) {
    a = _a;
    l = _l;
    r = _r;
  }
};
vector<int> a[2100], b[2100];
int u[2100], v[2100];
bool flag[2100][2100];
void initPoint(int &N, vector<int> a[], int u[], int d) {
  map<int, int> p;
  int n = 0;
  for (int i = 0; i < N; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    int t = x + y * d;
    if (!p[t]) {
      p[t] = ++n;
      u[n] = t;
    }
    a[p[t]].push_back(x);
  }
  N = n;
  for (int i = 1; i <= N; i++) sort(a[i].begin(), a[i].end());
}
void initSeg(int N, vector<int> a[], int u[], vector<seg> &s, int d) {
  for (int i = 1; i <= N; i++) {
    int l = a[i][0] - d, r = a[i][0] + d, size = a[i].size();
    for (int j = 1; j < size; j++) {
      int x = a[i][j];
      if (x - d <= r)
        r = x + d;
      else {
        s.push_back(seg(u[i], l << 1, r << 1));
        l = x - d;
        r = x + d;
      }
    }
    s.push_back(seg(u[i], l << 1, r << 1));
  }
}
bool check(int d) {
  vector<seg> s, t;
  initSeg(n, a, u, s, d);
  initSeg(m, b, v, t, d);
  vector<int> a;
  memset(flag, 0, sizeof(flag));
  for (int i = 0; i < s.size(); i++) {
    a.clear();
    for (int j = 0; j < t.size(); j++) {
      int x = s[i].a + t[j].a;
      if (s[i].l <= x && x <= s[i].r && t[j].l <= x && x <= t[j].r)
        a.push_back(j);
    }
    for (int j = 0; j < a.size(); j++)
      for (int k = j + 1; k < a.size(); k++) {
        int x = a[j], y = a[k];
        if (flag[x][y]) return 1;
        flag[x][y] = 1;
      }
  }
  return 0;
}
int main() {
  scanf("%d%d", &n, &m);
  initPoint(n, a, u, 1);
  initPoint(m, b, v, -1);
  if (n == 1 || m == 1) {
    puts("Poor Sereja!");
    return 0;
  }
  int L = 1, R = 1000000, ret = 0;
  while (L <= R) {
    int mid = (L + R) >> 1;
    if (check(mid))
      ret = mid, R = mid - 1;
    else
      L = mid + 1;
  }
  printf("%d\n", ret);
  return 0;
}
