#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using vi = vector<int>;
using vll = vector<ll>;
template <class Value>
class SegmentTree {
  int n;
  Value e;
  vector<Value> dat;
  function<Value(Value, Value)> f;
  inline Value query(int a, int b, int k, int l, int r) {
    if (r <= a || b <= l) return e;
    if (a <= l && r <= b)
      return dat[k];
    else {
      Value vl, vr;
      vl = query(a, b, k << 1, l, (l + r) >> 1);
      vr = query(a, b, (k << 1) | 1, (l + r) >> 1, r);
      return f(vl, vr);
    }
  }

 public:
  SegmentTree() {}
  SegmentTree(int n_, Value init_, function<Value(Value, Value)> f_)
      : n(1), e(init_), f(f_) {
    for (; n < n_; n <<= 1)
      ;
    dat = vector<Value>(n << 1, e);
  }
  void update(int k, Value a) {
    k += n;
    dat[k] = a;
    while (k > 1) {
      k >>= 1;
      dat[k] = f(dat[k << 1], dat[(k << 1) | 1]);
    }
  }
  Value query(int a, int b) { return query(a, b, 1, 0, n); }
};
using P = array<ll, 2>;
P f(P p, P q) {
  P r;
  r[0] = max(p[0] + q[0], p[1] + q[1]);
  r[1] = max(p[0] + q[1], p[1] + q[0]);
  return r;
}
const ll MI = LLONG_MIN / 3;
using ST = SegmentTree<P>;
void solve() {
  int N, Q;
  cin >> N >> Q;
  vi A(N), B(N);
  for (int(i) = (0); (i) < (int)(2 * N); ++(i)) cin >> A[i];
  for (int(i) = (0); (i) < (int)(2 * N); ++(i)) cin >> B[i];
  P e{0, MI};
  ST st(2 * N, e, f);
  for (int(i) = (0); (i) < (int)(2 * N); ++(i)) {
    st.update(i, P{A[i], B[i]});
  }
  for (int(i) = (0); (i) < (int)(Q); ++(i)) {
    int p, x, y;
    cin >> p >> x >> y;
    p--;
    A[p] = x;
    B[p] = y;
    st.update(p, P{x, y});
    ll ans = A[0] + A[2 * N - 1] + st.query(1, 2 * N - 1)[0];
    cout << ans << endl;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout << fixed << setprecision(15);
  solve();
  return 0;
}
