#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
int n, m;
struct Point {
  int x, y;
  Point(){};
  Point(int x, int y) : x(x), y(y) {}
} c[N], r[N];
struct Line {
  int a, l, r;
  Line() {}
  Line(int a, int l, int r) : a(a), l(l), r(r) {}
  bool operator<(const Line &O) const { return l < O.l; }
};
bool cross[N][N];
void Format(vector<Line> &vt) {
  vector<Line> temp;
  sort(vt.begin(), vt.end());
  for (int i = 0; i < vt.size(); i++) {
    if (temp.size() == 0 || temp[temp.size() - 1].r < vt[i].l)
      temp.push_back(vt[i]);
    else
      temp[temp.size() - 1].r = max(vt[i].r, temp[temp.size() - 1].r);
  }
  swap(temp, vt);
}
bool Check(int t) {
  int vis[N] = {};
  vector<Line> R, C;
  for (int i = 0; i < n; i++) {
    if (vis[i]) continue;
    vector<Line> vt;
    for (int j = i; j < n; j++) {
      if (r[j].x != r[i].x) continue;
      vis[j] = 1;
      vt.push_back(Line(r[j].x, r[j].y - t, r[j].y + t));
    }
    Format(vt);
    for (int j = 0; j < vt.size(); j++) R.push_back(vt[j]);
  }
  memset(vis, 0, sizeof(vis));
  for (int i = 0; i < m; i++) {
    if (vis[i]) continue;
    vector<Line> vt;
    for (int j = i; j < m; j++) {
      if (c[j].y != c[i].y) continue;
      vis[j] = 1;
      vt.push_back(Line(c[j].y, c[j].x - t, c[j].x + t));
    }
    Format(vt);
    for (int j = 0; j < vt.size(); j++) C.push_back(vt[j]);
  }
  memset(cross, false, sizeof(cross));
  for (int i = 0; i < R.size(); i++) {
    vector<int> vt;
    for (int j = 0; j < C.size(); j++) {
      if (R[i].a < C[j].l || R[i].a > C[j].r) continue;
      if (C[j].a < R[i].l || C[j].a > R[i].r) continue;
      vt.push_back(j);
    }
    for (int a = 0; a < vt.size(); a++)
      for (int b = a + 1; b < vt.size(); b++)
        if (cross[vt[a]][vt[b]])
          return true;
        else
          cross[vt[a]][vt[b]] = cross[vt[b]][vt[a]] = true;
  }
  return false;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    r[i] = Point(x + y, x - y);
  }
  for (int i = 0; i < m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    c[i] = Point(x + y, x - y);
  }
  int l = 1, r = 1e8, ret = -1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (Check(mid + mid))
      r = mid - 1, ret = mid;
    else
      l = mid + 1;
  }
  if (ret == -1)
    cout << "Poor Sereja!\n";
  else
    cout << ret << endl;
  return 0;
}
