#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9, mod = 1e9 + 7;
const int N = 100005;
int i, j, k, n, m, x, y, x2, y2, M;
pair<int, int> ST[4 * N], a[N], b[N];
vector<pair<int, int> > v[N], v2[N];
vector<pair<int, pair<int, int> > > blue;
vector<pair<pair<int, int>, int> > red;
vector<pair<pair<int, pair<int, int> >, pair<int, int> > > temp;
map<int, int> h;
pair<int, int> merge(pair<int, int> x, pair<int, int> y) {
  pair<int, int> temp;
  if (x.first > y.first) {
    temp.first = x.first;
    temp.second = max(x.second, y.first);
  } else {
    temp.first = y.first;
    temp.second = max(y.second, x.first);
  }
  return temp;
}
pair<int, int> update(int k, int bas, int son, int x, int t) {
  if (bas > x || son < x) return ST[k];
  if (bas == son) {
    if (ST[k].first <= t) ST[k].first = t;
    return ST[k];
  }
  return ST[k] = merge(update((k + k), bas, (bas + son >> 1), x, t),
                       update((k + k + 1), (bas + son >> 1) + 1, son, x, t));
}
pair<int, int> query(int k, int bas, int son, int x, int y) {
  if (bas > y || son < x) return make_pair(-inf, -inf);
  if (x <= bas && son <= y) return ST[k];
  return merge(query((k + k), bas, (bas + son >> 1), x, y),
               query((k + k + 1), (bas + son >> 1) + 1, son, x, y));
}
bool ctr(int time) {
  temp.clear();
  h.clear();
  for (int i = 1; i <= 20000; i++) {
    v[i].clear();
    v2[i].clear();
  }
  blue.clear();
  red.clear();
  for (int i = 1; i <= 100000; i++) ST[i] = make_pair(-inf, -inf);
  for (int i = 1; i <= n; i++) {
    x = a[i].first - time;
    y = a[i].second + time;
    x2 = a[i].first + time;
    y2 = a[i].second - time;
    int temp = x;
    x = x + y;
    y = y - temp;
    temp = x2;
    x2 = x2 + y2;
    y2 = y2 - temp;
    ::temp.push_back(
        make_pair(make_pair(0, make_pair(x, y)), make_pair(x2, y2)));
    h[x] = 1;
    h[x2] = 1;
    h[y] = 1;
    h[y2] = 1;
  }
  for (int i = 1; i <= m; i++) {
    x = b[i].first - time;
    y = b[i].second - time;
    x2 = b[i].first + time;
    y2 = b[i].second + time;
    int temp = x;
    x = x + y;
    y = y - temp;
    temp = x2;
    x2 = x2 + y2;
    y2 = y2 - temp;
    ::temp.push_back(
        make_pair(make_pair(1, make_pair(x, y)), make_pair(x2, y2)));
    h[x] = 1;
    h[x2] = 1;
    h[y] = 1;
    h[y2] = 1;
  }
  M = 0;
  for (__typeof(h.begin()) it = h.begin(); it != h.end(); it++)
    it->second = ++M;
  for (__typeof(temp.begin()) it = temp.begin(); it != temp.end(); it++)
    if (it->first.first == 0) {
      v[h[it->first.second.first]].push_back(
          make_pair(h[it->second.second], h[it->first.second.second]));
    } else {
      v2[h[it->second.second]].push_back(
          make_pair(h[it->first.second.first], h[it->second.first]));
    }
  for (int i = 1; i <= M; i++) {
    sort(v[i].begin(), v[i].end());
    int k = 0, last = 0;
    for (int j = 0; j <= (int)v[i].size() - 1; j++) {
      last = max(last, v[i][j].second);
      while (k < v[i].size() && last >= v[i][k].first) {
        last = max(last, v[i][k].second);
        k++;
      }
      v[i][j].second = last;
      blue.push_back(make_pair(i, make_pair(v[i][j].first, v[i][j].second)));
    }
  }
  for (int i = 1; i <= M; i++) {
    sort(v2[i].begin(), v2[i].end());
    int k = 0, last = 0;
    for (int j = 0; j <= (int)v2[i].size() - 1; j++) {
      last = max(last, v2[i][j].second);
      while (k < v2[i].size() && last >= v2[i][k].first) {
        last = max(last, v2[i][k].second);
        k++;
      }
      v2[i][j].second = last;
      red.push_back(make_pair(make_pair(v2[i][j].first, v2[i][j].second), i));
    }
  }
  sort(blue.begin(), blue.end());
  sort(red.begin(), red.end());
  int w = 0;
  for (int i = 0; i <= (int)blue.size() - 1; i++) {
    while (w < red.size() && red[w].first.first <= blue[i].first) {
      update(1, 1, M, red[w].second, red[w].first.second);
      w++;
    }
    for (int j = i + 1; j <= blue.size() - 1; j++) {
      if (blue[j].first == blue[i].first) continue;
      int xx = max(blue[i].second.first, blue[j].second.first);
      int yy = min(blue[i].second.second, blue[j].second.second);
      if (query(1, 1, M, xx, yy).second >= blue[j].first) return true;
    }
  }
  return false;
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d %d", &a[i].first, &a[i].second);
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d %d", &b[i].first, &b[i].second);
  }
  int l = 0, r = 1e6 + 1;
  if (ctr(r) == 0) {
    cout << "Poor Sereja!" << '\n';
    return 0;
  }
  while (l < r) {
    int mid = l + r >> 1;
    if (ctr(mid))
      r = mid;
    else
      l = mid + 1;
  }
  cout << l << '\n';
  return 0;
}
