#include <bits/stdc++.h>
using namespace std;
template <class T>
bool umin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool umax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
pair<int, int> s[100009];
int n, m;
map<int, int> pm;
vector<pair<int, int> > vx[100009], vy[100009];
pair<int, int> intersection(pair<int, int> x, pair<int, int> y) {
  if (x.first > y.first) return make_pair(x.first, max(y.first, x.second));
  return make_pair(y.first, max(x.first, y.second));
}
struct point {
  int x1, KusuraBakma;
} B[100009], R[100009];
void upd(int p, int v, int nd, int x, int y) {
  if (x == y) {
    umax(s[nd].first, v);
    return;
  }
  int mid = (x + y) >> 1;
  if (p <= mid)
    upd(p, v, nd << 1, x, mid);
  else
    upd(p, v, nd << 1 | 1, mid + 1, y);
  s[nd] = intersection(s[nd << 1], s[nd << 1 | 1]);
}
pair<int, int> tap(int l, int r, int nd, int x, int y) {
  if (l > y or x > r) return make_pair(-1000000007, -1000000007);
  if (l <= x and y <= r) return s[nd];
  int mid = (x + y) >> 1;
  pair<int, int> i1 = tap(l, r, nd << 1, x, mid);
  pair<int, int> i2 = tap(l, r, nd << 1 | 1, mid + 1, y);
  return intersection(i1, i2);
}
int ok(int pi) {
  pm.clear();
  int c = 0;
  vector<pair<pair<int, int>, pair<int, int> > > vec;
  vector<pair<int, pair<int, int> > > b;
  vector<pair<pair<int, int>, int> > r;
  for (int i = 0; i < 100009; i++) {
    s[i] = make_pair(-1000000007, -1000000007);
    vx[i].resize(0);
    vy[i].resize(0);
  }
  for (int i = 1; i <= n; i++) {
    int x = B[i].x1 - pi / (1);
    int y = B[i].KusuraBakma + pi / (1);
    int x2 = B[i].x1 + pi / (1);
    int y2 = B[i].KusuraBakma - pi / (1);
    int x3 = (x + y), y3 = (x - y);
    int x4 = (x2 + y2), y4 = (x2 - y2);
    pm[x3] = pm[y3] = pm[x4] = pm[y4] = 1;
    vec.push_back(make_pair(make_pair(0, x3), make_pair(y3, y4)));
  }
  for (int i = 1; i <= m; i++) {
    int x = R[i].x1 - pi / (1);
    int y = R[i].KusuraBakma - pi / (1);
    int x2 = R[i].x1 + pi / (1);
    int y2 = R[i].KusuraBakma + pi / (1);
    int x3 = (x + y), y3 = (x - y);
    int x4 = (x2 + y2), y4 = (x2 - y2);
    pm[x3] = pm[y3] = pm[x4] = pm[y4] = 1;
    vec.push_back(make_pair(make_pair(1, y3), make_pair(x3, x4)));
  }
  for (typeof((pm).begin()) it = (pm).begin(); it != (pm).end(); it++)
    it->second = ++c;
  for (typeof((vec).begin()) it = (vec).begin(); it != (vec).end(); it++) {
    if (it->first.first == 0)
      vx[pm[it->first.second]].push_back(
          make_pair(pm[it->second.first], pm[it->second.second]));
    else
      vy[pm[it->first.second]].push_back(
          make_pair(pm[it->second.first], pm[it->second.second]));
  }
  for (int i = 1; i <= c; i++) {
    sort(vx[i].begin(), vx[i].end());
    int last = 0, cnt = 0;
    for (typeof((vx[i]).begin()) it = (vx[i]).begin(); it != (vx[i]).end();
         it++) {
      umax(last, it->second);
      while (cnt < vx[i].size() and last >= vx[i][cnt].first)
        umax(last, vx[i][cnt++].second);
      it->second = last;
      b.push_back(make_pair(i, *it));
    }
  }
  for (int i = 1; i <= c; i++) {
    sort(vy[i].begin(), vy[i].end());
    int last = 0, cnt = 0;
    for (typeof((vy[i]).begin()) it = (vy[i]).begin(); it != (vy[i]).end();
         it++) {
      umax(last, it->second);
      while (cnt < vy[i].size() and last >= vy[i][cnt].first)
        umax(last, vy[i][cnt++].second);
      it->second = last;
      r.push_back(make_pair(*it, i));
    }
  }
  sort(b.begin(), b.end());
  sort(r.begin(), r.end());
  int cr = 0;
  for (int i = 0; i < b.size(); i++) {
    while (cr < r.size() and r[cr].first.first <= b[i].first)
      upd(r[cr].second, r[cr].first.second, 1, 1, c), cr++;
    for (int j = i + 1; j < b.size(); j++) {
      if (b[i].first == b[j].first) continue;
      int xx = max(b[i].second.first, b[j].second.first);
      int yy = min(b[i].second.second, b[j].second.second);
      if (tap(xx, yy, 1, 1, c).second >= b[j].first) return (1 - 0);
    }
  }
  return (0 - 0);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d%d", &B[i].x1, &B[i].KusuraBakma);
  for (int i = 1; i <= m; i++) scanf("%d%d", &R[i].x1, &R[i].KusuraBakma);
  int st = 1, en = 1e6;
  while (st + 1 < en) {
    int mid = (st + en) >> 1;
    if (ok(mid))
      en = mid;
    else
      st = mid;
  }
  for (int i = st; i <= en; i++)
    if (ok(i)) {
      printf("%d\n", i);
      return 0;
    }
  printf("Poor Sereja!\n");
  return 0;
}
