#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const long long MOD2 = 998244353;
const long long MOD3 = 1812447359;
const long long INF = 1ll << 60;
const double PI = 2 * asin(1);
void yes() { printf("yes\n"); }
void no() { printf("no\n"); }
void Yes() { printf("Yes\n"); }
void No() { printf("No\n"); }
void YES() { printf("YES\n"); }
void NO() { printf("NO\n"); }
int N, Q;
vector<int> Tree[21];
int Bit[21];
int Add(int num) {
  for (int i = 0; i < 21; i++) {
    Tree[i][num / Bit[i]]++;
  }
  return 0;
}
int Remove(int num) {
  int Index = 0;
  bool flag = false;
  for (int i = 0; i < 20; i++) {
    if (num - Tree[i + 1][Index * 2] <= 0) {
      Index *= 2;
    } else {
      num -= Tree[i + 1][Index * 2];
      Index *= 2;
      Index++;
    }
  }
  if (Tree[20][Index] == 0) Index++;
  for (int i = 0; i < 21; i++) {
    Tree[i][Index / Bit[i]]--;
  }
  return 0;
}
int main() {
  Bit[20] = 1;
  for (int i = 19; i >= 0; i--) Bit[i] = Bit[i + 1] * 2;
  for (int i = 0; i < 21; i++) {
    Tree[i].resize(pow(2, i));
  }
  scanf("%d%d", &N, &Q);
  for (int i = 0; i < N; i++) {
    int A;
    scanf("%d", &A);
    Add(A);
  }
  for (int i = 0; i < Q; i++) {
    int K;
    scanf("%d", &K);
    if (K > 0)
      Add(K);
    else
      Remove(-1 * K);
  }
  for (int i = 0; i <= 1e6; i++) {
    if (Tree[20][i] > 0) {
      printf("%d\n", i);
      return 0;
    }
  }
  printf("0\n");
  return 0;
}
