#include <iostream>
#include <fstream>

using namespace std;

ifstream f("test.in");
ofstream g("test.out");

#define nmax 100005

typedef struct{
    int val, add, viz;
}camp;

camp aint[nmax*4];
int n, m, sum;

void udpate(int nod, int st, int dr, int a, int b, int val){

    if (a <= st && dr <= b){
        aint[nod].val += val*(dr-st+1);
        aint[nod].add += val;
        aint[nod].viz = 1;
        return;
    }

    int mij = (st + dr) / 2;

    if (aint[nod].viz==1){
        udpate(nod*2, st, mij, st, mij, aint[nod].add);
        udpate(nod*2+1, mij+1, dr, mij+1, dr, aint[nod].add);
        aint[nod].viz = 0;
        aint[nod].add = 0;
    }

    if (a <= mij) udpate(nod*2, st, mij, a, b, val);
    if (b > mij) udpate(nod*2+1, mij+1, dr, a, b, val);

    aint[nod].val = aint[nod*2].val + aint[nod*2+1].val;

}

void citeste(){

    f >> n >> m;
    for(int i=1; i<=n; i++){
        int x;
        f >> x;
        udpate(1,1,n,i,i,x);
    }

}

void query(int nod, int st, int dr, int a, int b){

    if (a <= st && dr <= b){
        sum += aint[nod].val;
        return;
    }

    int mij = (st + dr) / 2;
    if (aint[nod].viz == 1){
        udpate(nod*2, st, mij, st, mij, aint[nod].add);
        udpate(nod*2+1, mij+1, dr, mij+1, dr, aint[nod].add);
        aint[nod].viz = 0;
        aint[nod].add = 0;
    }

    if (a <= mij) query(nod*2, st, mij, a, b);
    if ( b > mij) query(nod*2+1, mij+1, dr, a, b);

}

int main(){

    citeste();
    for(int i=1; i<=m; i++){
        int x, y, x2, y2, val;
        f >> x >> y >> x2 >> y2 >> val;
        udpate(1,1,n,x,y,val);
        sum = 0;
        query(1,1,n,x2, y2);
        g << sum << "\n";
    }

    return 0;

}
