#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000000")
using namespace std;
const long long int INF = 2e9;
void init(vector<int> &dsu) {
  for (int i = 0; i < ((int)(dsu).size()); i++) {
    dsu[i] = i;
  }
}
int find_p(vector<int> &dsu, int id) {
  if (dsu[id] == id) return id;
  return dsu[id] = find_p(dsu, dsu[id]);
}
bool unite(vector<int> &dsu, int f, int s) {
  f = find_p(dsu, f);
  s = find_p(dsu, s);
  if (f == s) return true;
  dsu[f] = s;
  return false;
}
inline bool in(long double f, long double s, long double d) {
  return s >= f && s <= d;
}
bool intr(pair<long double, long double> f, pair<long double, long double> s,
          long double time) {
  if (time == INF) return true;
  long double a1 = -1, b1 = -1, c1 = -(a1 * f.first + b1 * f.second);
  long double a2 = 1, b2 = -1, c2 = -(a2 * s.first + b2 * s.second);
  long double x = (b1 * c2 - b2 * c1) / (a1 * b2 - b1 * a2),
              y = (c1 * a2 - a1 * c2) / (a1 * b2 - b1 * a2);
  return in(f.first - time, x, f.first + time) &&
         in(f.second - time, y, f.second + time) &&
         in(s.first - time, x, s.first + time) &&
         in(s.second - time, y, s.second + time);
}
bool ini(long double f, long double s, long double time) {
  return (f - s) <= time * 2;
}
bool intr2(pair<long double, long double> f, pair<long double, long double> s,
           int q, long double time) {
  if (!q && !(f.first + f.second == s.first + s.second)) return false;
  if (q && !(f.first - f.second == s.first - s.second)) return false;
  if (time == INF) return true;
  long double x = min(f.first, s.first), x2 = max(f.first, s.first);
  long double y = min(f.second, s.second), y2 = max(f.second, s.second);
  return ini(x, x2, time) && ini(y, y2, time);
}
bool can(vector<pair<long double, long double> > p1,
         vector<pair<long double, long double> > p2, long long int time) {
  int n = (int)(p1).size(), m = (int)(p2).size();
  for (int q = 0; q < (2); q++) {
    vector<int> with(n, -1);
    vector<int> dsu(m);
    init(dsu);
    for (int i = 0; i < (n); i++) {
      for (int j = 0; j < (m); j++) {
        if (intr(!q ? p1[i] : p2[j], !q ? p2[j] : p1[i], time)) {
          if (with[i] == -1)
            with[i] = j;
          else {
            if (unite(dsu, j, with[i])) {
              return true;
            }
          }
        }
      }
      for (int j = 0; j < (i); j++) {
        if (i == j) continue;
        if (with[j] == -1 || with[i] == -1) continue;
        if (intr2(p1[i], p1[j], q, time)) {
          if (unite(dsu, with[i], with[j])) {
            return true;
          }
        }
      }
    }
    swap(n, m);
    swap(p1, p2);
  }
  return false;
}
int main() {
  int n, m;
  cin >> n >> m;
  vector<pair<long double, long double> > p1(n), p2(m);
  bool yes = false;
  for (int i = 0; i < (n); i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    p1[i] = make_pair(a, b);
    if (i && a + b != p1[i - 1].first + p1[i - 1].second) yes = true;
  }
  bool yes2 = false;
  for (int i = 0; i < (m); i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    p2[i] = make_pair(a, b);
    if (i && a - b != p2[i - 1].first - p2[i - 1].second) yes2 = true;
  }
  if ((!yes || !yes2) || !can(p1, p2, INF)) {
    cout << "Poor Sereja!";
    return 0;
  }
  long long int l = 0, r = INF;
  while (l != r) {
    long long int m = (l + r) / 2;
    if (can(p1, p2, m)) {
      r = m;
    } else
      l = m + 1;
  }
  cout << l;
}
