#include <bits/stdc++.h>
using namespace std;
struct FT {
  vector<long long> s;
  FT(int n) : s(n) {}
  void update(int pos, long long dif) {
    for (; pos < (int)(s).size(); pos |= pos + 1) s[pos] += dif;
  }
  long long query(int pos) {
    long long res = 0;
    for (; pos > 0; pos &= pos - 1) res += s[pos - 1];
    return res;
  }
  int lower_bound(long long sum) {
    if (sum <= 0) return -1;
    int pos = 0;
    for (int pw = 1 << 25; pw; pw >>= 1) {
      if (pos + pw <= (int)(s).size() && s[pos + pw - 1] < sum)
        pos += pw, sum -= s[pos - 1];
    }
    return pos;
  }
};
int maxn = 1e6 + 7;
int N, Q, val;
int main() {
  scanf("%d %d", &N, &Q);
  FT tree(maxn);
  for (int i = 0; i < (N); ++i) {
    scanf("%d", &val);
    tree.update(val, 1);
  }
  for (int i = 0; i < (Q); ++i) {
    scanf("%d", &val);
    if (val > 0) {
      tree.update(val, 1);
    } else {
      int pos = tree.lower_bound(-val);
      tree.update(pos, -1);
    }
  }
  int pos = tree.lower_bound(1);
  if (pos == maxn) {
    printf("0\n");
  } else {
    printf("%d\n", pos);
  }
}
