#include <bits/stdc++.h>
using namespace std;
const int MAX = 1010;
int n, t, pop = -1, p[2 * MAX], para[2 * MAX], odw[2 * MAX];
inline void dodaj_pare(int a, int b) {
  para[a] = b;
  para[b] = a;
}
void wczytaj_dane() {
  int m;
  cin >> n >> m;
  for (int i = 0; i < (2 * n); i++) cin >> p[i];
  fill(para, para + 2 * n, -1);
  while (m--) {
    int a, b;
    cin >> a >> b;
    dodaj_pare(a - 1, b - 1);
  }
  cin >> t;
}
void wypisz(int x) {
  assert(!odw[x]);
  odw[x] = true;
  cout << (x + 1) << '\n';
  fflush(stdout);
}
int najsilniejszy_sparowany() {
  int x = -1;
  for (int i = 0; i < (2 * n); i++)
    if ((!odw[i]) && para[i] != -1 && (x == -1 || p[x] < p[i])) x = i;
  return x;
}
int najsilniejszy() {
  int x = -1;
  for (int i = 0; i < (2 * n); i++)
    if ((!odw[i]) && (x == -1 || p[x] < p[i])) x = i;
  assert(x != -1);
  return x;
}
int rozwiaz() {
  int x = najsilniejszy_sparowany();
  if (x != -1) return x;
  return najsilniejszy();
}
void moj_ruch() {
  if (pop != -1 && para[pop] != -1 && (!odw[para[pop]])) {
    wypisz(para[pop]);
    return;
  }
  wypisz(rozwiaz());
}
inline int wczytaj() {
  int x;
  cin >> x;
  if (x == -1) exit(1);
  return x - 1;
}
void twoj_ruch() {
  int x = wczytaj();
  odw[x] = true;
  pop = x;
}
void zrob_test() {
  wczytaj_dane();
  fill(odw, odw + 2 * n, false);
  if (t == 1) {
    for (int q = 0; q < (n); q++) {
      moj_ruch();
      twoj_ruch();
    }
  } else {
    for (int q = 0; q < (n); q++) {
      twoj_ruch();
      moj_ruch();
    }
  }
}
int main() {
  zrob_test();
  return 0;
}
