#include <bits/stdc++.h>
const int M = 1e6 + 10;
int a[M], num[M], T[M << 2];
int q;
void up(int o) { T[o] = T[o << 1] + T[o << 1 | 1]; }
void update(int o, int l, int r, int v, int p) {
  if (l == r) {
    T[o] = v;
    if (v) num[l] = q;
    return;
  }
  int m = (l + r) >> 1;
  if (p <= (v ? m : T[o << 1]))
    update(o << 1, l, m, v, p);
  else
    update(o << 1 | 1, m + 1, r, v, v ? p : p - T[o << 1]);
  up(o);
}
void query(int o, int l, int r) {
  if (T[o] == 0) return;
  if (l == r) {
    printf("%d", num[l]);
    return;
  }
  int m = (l + r) >> 1;
  query(o << 1, l, m);
  query(o << 1 | 1, m + 1, r);
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; ++i) {
    scanf("%d", &a[i]);
  }
  int k = 0;
  for (int i = 0; i < n; ++i) {
    scanf("%d", &q);
    if (~q) {
      update(1, 1, n, 1, ++k);
    } else {
      for (int i = 0; i < m; ++i) {
        if (T[1] < a[i] - i) break;
        update(1, 1, n, 0, a[i] - i);
      }
    }
  }
  if (T[1] == 0)
    puts("Poor stack!");
  else
    query(1, 1, n);
}
