#include <stdio.h>

#include <vector>

using namespace std;

struct vect
{
    long long val, suma;
};

int n, m, lastv;
long long sp[100005];
vector <int> fiust[262150];
vector <int> fiudr[262150];
//vector <vect> aint[262150];
vector <long long> val[262150];
vector <long long> suma[262150];

void build (int nod, int st, int dr)
{
    fiust[nod].push_back (0);
    fiudr[nod].push_back (0);
    val[nod].push_back (0);
    suma[nod].push_back (0);
    if (st == dr)
        return;
    int m = (st + dr) >> 1;
    build (nod * 2, st, m);
    build (nod * 2 + 1, m + 1, dr);
}

void update (int nod, int ind, int st, int dr, int left, int right, int vval)
{
    fiust[nod].push_back (fiust[nod][ind]);
    fiudr[nod].push_back (fiudr[nod][ind]);
    val[nod].push_back (val[nod][ind]);
    suma[nod].push_back (suma[nod][ind]);
    
    int poz = val[nod].size() - 1;
    if (left <= st && dr <= right)
    {
        val[nod][poz] += vval;
        suma[nod][poz] += ((long long)dr - st + 1) * vval;
        return;
    }
    
    int m = (st + dr) >> 1;
    if (left <= m)
    {
        update (nod * 2, fiust[nod][ind], st, m, left, right, vval);
        fiust[nod][fiust[nod].size() - 1] = val[nod * 2].size() - 1;
    }
    if (m < right)
    {
        update (nod * 2 + 1, fiudr[nod][ind], m + 1, dr, left, right, vval);
        fiudr[nod][fiudr[nod].size() - 1] = val[nod * 2 + 1].size() - 1;
    }
    
    int indst, inddr;
    indst = fiust[nod].back();
    inddr = fiudr[nod].back();
    suma[nod][poz] = suma[nod * 2][indst] + suma[nod * 2 + 1][inddr] + ((long long)dr - st + 1) * val[nod].back();
}

long long query (int nod, int ind, int st, int dr, int left, int right, long long vval)
{
    if (left <= st && dr <= right)
        return suma[nod][ind] + ((long long)dr - st + 1) * vval;
    vval += val[nod][ind];
    int m = (st + dr) >> 1;
    long long suma = 0;
    if (left <= m)
        suma += query (nod * 2, fiust[nod][ind], st, m, left, right, vval);
    if (m < right)
        suma += query (nod * 2 + 1, fiudr[nod][ind], m + 1, dr, left, right, vval);
    return suma;
}

int main ()
{
#ifdef local
    freopen ("ants.in", "r", stdin);
    freopen ("ants.out", "w", stdout);
#endif

    scanf ("%d %d", &m, &n);
    
    int i;
    for (i = 1; i <= n; i ++)
    {
        scanf ("%lld", &sp[i]);
        sp[i] += sp[i - 1];
    }
    
    long long lasts = 0;
    int p, x, y, val, z, t, st, dr, qx, qy;
    lastv = 1;
    build (1, 1, n);
    for (i = 2; i <= m; i ++)
    {
        scanf ("%d %d %d %d %d %d", &p, &x, &y, &val, &z, &t);
        st = (x + lasts) % n + 1;
        dr = (y + lasts) % n + 1;
        qx = (z + lasts) % n + 1;
        qy = (t + lasts) % n + 1;
        lastv = i;
        update (1, p - 1, 1, n, st, dr, val);
        lasts = query (1, lastv - 1, 1, n, qx, qy, 0)+ sp[qy] - sp[qx - 1];
        printf ("%lld\n", lasts);
    }
    return 0;
}