#include<deque>
#include<queue>
#include<vector>
#include<algorithm>
#include<iostream>
#include<set>
#include<cmath>
#include<tuple>
#include<string>
#include<chrono>
#include<functional>
#include<iterator>
#include<random>
#include<unordered_set>
#include<unordered_map>
#include<array>
#include<map>
#include<bitset>
#include<iomanip>
#include<list>
using namespace std;
typedef long long int llint;
typedef long double lldo;
#define mp make_pair
#define mt make_tuple
#define pub push_back
#define puf push_front
#define pob pop_back
#define pof pop_front
#define fir first
#define sec second
#define res resize
#define ins insert
#define era erase
#define RE return 0
//ios::sync_with_stdio(false);
//std::cin.tie(0);
//<< setprecision(20)
const int mod=1e9+7;
const int big=1e9+100;
const long double pai=3.141592653589793238462643383279502884197;
const long double ena=2.71828182845904523536;
const long double eps=1e-7;
template <class T,class U>void mineq(T& a,U b){if(a>b){a=b;}}
template <class T,class U>void maxeq(T& a,U b){if(a<b){a=b;}}
template <class T> void soun(T& ar)
{sort(ar.begin(),ar.end());ar.erase(unique(ar.begin(),ar.end()),ar.end());}
int main(void){
	int n,q,i,j;cin>>n>>q;
	vector<llint>A(2*n);
	vector<llint>B(2*n);
	llint ans=0,ki=0;
	for(i=0;i<2*n;i++){cin>>A[i];}
	for(i=0;i<2*n;i++){cin>>B[i];}
	multiset<llint>osi;
	ans+=A[0]+A[2*n-1];
	for(i=1;i<2*n-1;i++){
		ans+=max(A[i],B[i]);
		if(B[i]>A[i]){ki++;}
		osi.ins(abs(A[i]-B[i]));
	}
	while(q--){
		int p;llint x,y;cin>>p>>x>>y;p--;
		if(p==0||p==2*n-1){ans-=A[p];ans+=x;A[p]=x;B[p]=y;}
		else{
			ans-=max(A[p],B[p]);
			if(B[p]>A[p]){ki--;}
			osi.era(osi.lower_bound(abs(A[p]-B[p])));
			A[p]=x;B[p]=y;
			ans+=max(A[p],B[p]);
			if(B[p]>A[p]){ki++;}
			osi.ins(abs(A[p]-B[p]));
		}
		if(ki%2==1){cout<<ans-(*osi.begin())<<endl;}
		else{cout<<ans<<endl;}
	}
	RE;
}//もやし動物園でログインしていた...