#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 << 62;   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 ); }   struct SegmentTree {     vector<int> Tree[21];     void Make() {       for (int i = 0; i < 21; i++) {         Tree[i].resize(1 << i);       }     }     void Add(int num, int val) {       for (int i = 20; i >= 0; i--) {         Tree[i][num] += val;         num /= 2;       }     }     int Search(int num) {       int now = 0, sum = 0;       for (int i = 1; i < 21; i++) {         now *= 2;         if (sum + Tree[i][now] < num) {           sum += Tree[i][now];           now++;         }       }       return now;     }   };   int main() {     int N, Q;     scanf( %d%d , &N, &Q);     SegmentTree T;     T.Make();     for (int i = 0; i < N; i++) {       int A;       scanf( %d , &A);       T.Add(A, 1);     }     for (int i = 0; i < Q; i++) {       int K;       scanf( %d , &K);       if (K > 0) {         T.Add(K, 1);       } else {         int num = T.Search(-1 * K);         T.Add(num, -1);       }     }     for (int i = 0; i <= 1e6; i++) {       if (T.Tree[20][i] > 0) {         cout << i << endl;         return 0;       }     }     cout << 0 << endl;     return 0;   }   