#include #include #include #include #include #include #include #include using namespace std; typedef long long LL; unordered_map cnt; const int maxn=1e6+10; LL res; int n,m; LL a[maxn]; int main() { #ifdef local freopen("pro.in", "r", stdin); // freopen("pro.out","w",stdout); #endif scanf("%d%d",&n,&m); cnt[0]=1; LL pre=0; for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); pre^=a[i]; res+=cnt[pre]; cnt[pre]++; } for(int i=2;i<=n;i++) a[i]^=a[i-1]; LL xor_sum=0,odd_num=0,max_res,min_res; bool is_first=true; while(m-->0) { int p,x; scanf("%d%d",&p,&x); LL a_before=a[p],a_after=a[p]^x; LL delta=-(cnt[a_before]-1)+cnt[a_after]; if(x==0) goto proc; a[p]^=x; cnt[a_before]--; cnt[a_after]++; res+=delta; assert(res>=0); proc: xor_sum^=res; odd_num+=(res&1); if(is_first) { max_res=min_res=res; is_first=false; } max_res=max(max_res,res); min_res=min(min_res,res); } printf("%lld\n%lld\n%lld\n%lld\n",xor_sum,odd_num,max_res,min_res); return 0; }