#include <bits/stdc++.h>
using namespace std;
inline void inp(int &n) {
  n = 0;
  int ch = getchar();
  int sign = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') sign = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    n = (n << 3) + (n << 1) + ch - '0', ch = getchar();
  n = n * sign;
}
const int maxx = 1e6 + 10;
int tree[10 * maxx], mark[maxx], size = 0, a[maxx], n, ans[maxx];
void upd(int l, int r, int node, int val, int pos) {
  if (l > r) return;
  if (l == r) {
    tree[node] = val;
    return;
  }
  int mid = (l + r) >> 1;
  if (mid >= pos)
    upd(l, mid, 2 * node, val, pos);
  else
    upd(mid + 1, r, 2 * node + 1, val, pos);
  tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
void upd1(int l, int r, int node, int val, int num) {
  if (l > r) return;
  if (l == r) {
    tree[node] = val;
    mark[l] = 1;
    return;
  }
  int m = (l + r) >> 1;
  if (tree[2 * node] >= num)
    upd1(l, m, 2 * node, val, num);
  else
    upd1(m + 1, r, 2 * node + 1, val, num - tree[2 * node]);
  tree[node] = tree[node * 2] + tree[node * 2 + 1];
  return;
}
void del(int l, int r) {
  for (int i = 1; i <= n; i++) {
    if (a[i] - i + 1 > tree[1])
      return;
    else
      upd1(l, r, 1, 0, a[i] - i + 1);
  }
}
int main() {
  int m, xx;
  inp(m);
  inp(n);
  memset((mark), (0), sizeof(mark));
  memset((tree), (0), sizeof(tree));
  size = 0;
  for (int i = 1; i <= n; i++) inp(a[i]);
  for (int i = 0; i < m; i++) {
    inp(xx);
    if (xx != -1) {
      ans[++size] = xx;
      upd(1, maxx, 1, 1, size);
    } else
      del(1, maxx);
  }
  int flag = 0;
  for (int i = 1; i <= size; i++)
    if (!mark[i]) cout << ans[i], flag = 1;
  if (!flag) cout << "Poor stack!";
  cout << endl;
  return 0;
}
