#include <bits/stdc++.h>
using namespace std;
const int maxN = 2e3 + 5;
const long long INF = 1e18;
const long long MOD = 1e9 + 7;
int n, m, check[maxN][maxN];
int X[2 * maxN], Y[2 * maxN];
vector<pair<int, pair<int, int> > > H, W, A, B;
vector<int> G;
bool isBetween(pair<int, pair<int, int> > a, pair<int, pair<int, int> > b) {
  return (a.second.first <= b.first && b.first <= a.second.second);
}
void compress(vector<pair<int, pair<int, int> > > &S,
              vector<pair<int, pair<int, int> > > &T) {
  sort(S.begin(), S.end());
  T.push_back(S[0]);
  int end = 0;
  for (auto ppp : S) {
    if (ppp.first != T[end].first || ppp.second.first > T[end].second.second) {
      T.push_back(ppp);
      end++;
    } else
      T[end].second.second = ppp.second.second;
  }
  return;
}
bool isVal(int T) {
  memset(check, 0, sizeof check);
  H.clear();
  W.clear();
  A.clear();
  B.clear();
  for (int i = 0; i < n; i++) H.push_back({Y[i], {X[i] - 2 * T, X[i] + 2 * T}});
  for (int i = n; i < n + m; i++)
    W.push_back({X[i], {Y[i] - 2 * T, Y[i] + 2 * T}});
  compress(H, A);
  compress(W, B);
  for (auto v : A) {
    G.clear();
    for (int i = 0; i < (int)B.size(); i++) {
      pair<int, pair<int, int> > u = B[i];
      if (isBetween(u, v) && isBetween(v, u)) {
        for (int j : G)
          if (check[i][j]++) return true;
        G.push_back(i);
      }
    }
  }
  return false;
}
int main() {
  time_t START = clock();
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n + m; i++) {
    scanf("%d%d", X + i, Y + i);
    X[i] -= Y[i];
    Y[i] += Y[i] + X[i];
  }
  int lt = 0, rt = maxN * maxN;
  while (rt - lt > 1) {
    int md = (lt + rt) / 2;
    (isVal(md) ? rt : lt) = md;
  }
  if (rt == maxN * maxN)
    printf("Poor Sereja!\n");
  else
    printf("%d\n", rt);
  time_t FINISH = clock();
  cerr << "Execution time: "
       << (long double)(FINISH - START) / CLOCKS_PER_SEC * 1000.0
       << " milliseconds.\n";
  return 0;
}
