#import sys
mod=(10**9)+7
from sys import stdin, stdout
#sys.setrecursionlimit(10**6)
#import threading
#threading.stack_size(2**26)
def ain():
return map(int,sin().split())
def sin():
return stdin.readline().strip()
"""**************************************************************************"""
def lc(x):
return (2*x)+1
def rc(x):
return (2*x)+2
def update(i,l,r,cl,cr,v):
if(l>r or l>cr or r<cl):
return
if(laz[i]!=[1,0]):
s[i]=(s[i]*laz[i][0])%mod
s[i]=(s[i]+(laz[i][1]*(r-l+1))%mod)%mod
if(l!=r):
laz[lc(i)][0]=(laz[lc(i)][0]*laz[i][0])%mod
laz[lc(i)][1]=(laz[lc(i)][1]*laz[i][0])%mod
laz[lc(i)][1]=(laz[lc(i)][1]+laz[i][1])%mod
laz[rc(i)][0]=(laz[rc(i)][0]*laz[i][0])%mod
laz[rc(i)][1]=(laz[rc(i)][1]*laz[i][0])%mod
laz[rc(i)][1]=(laz[rc(i)][1]+laz[i][1])%mod
laz[i]=[1,0]
if(l>=cl and r<=cr):
s[i]=(s[i]*v[0])%mod
s[i]=(s[i]+(v[1]*(r-l+1))%mod)%mod
if(l!=r):
laz[lc(i)][0]=(laz[lc(i)][0]*v[0])%mod
laz[lc(i)][1]=(laz[lc(i)][1]*v[0])%mod
laz[lc(i)][1]=(laz[lc(i)][1]+v[1])%mod
laz[rc(i)][0]=(laz[rc(i)][0]*v[0])%mod
laz[rc(i)][1]=(laz[rc(i)][1]*v[0])%mod
laz[rc(i)][1]=(laz[rc(i)][1]+v[1])%mod
return
mid=(l+r)/2
update(lc(i),l,mid,cl,cr,v)
update(rc(i),mid+1,r,cl,cr,v)
s[i]=(s[lc(i)]+s[rc(i)])%mod
def range1(i,l,r,cl,cr):
if(l>r or l>cr or r<cl):
return 0
if(laz[i]!=[1,0]):
s[i]=(s[i]*laz[i][0])%mod
s[i]=(s[i]+(laz[i][1]*(r-l+1))%mod)%mod
if(l!=r):
laz[lc(i)][0]=(laz[lc(i)][0]*laz[i][0])%mod
laz[lc(i)][1]=(laz[lc(i)][1]*laz[i][0])%mod
laz[lc(i)][1]=(laz[lc(i)][1]+laz[i][1])%mod
laz[rc(i)][0]=(laz[rc(i)][0]*laz[i][0])%mod
laz[rc(i)][1]=(laz[rc(i)][1]*laz[i][0])%mod
laz[rc(i)][1]=(laz[rc(i)][1]+laz[i][1])%mod
laz[i]=[1,0]
if(l>=cl and r<=cr):
return s[i]
mid=(l+r)/2
p1=range1(lc(i),l,mid,cl,cr)
p2=range1(rc(i),mid+1,r,cl,cr)
return (p1+p2)%mod
n,q=ain()
a=ain()
k=set(a)
b=[]
for i in range(q):
l,r,x,y=ain()
k.add(l)
k.add(r)
b.append([l,r,x%mod,y%mod])
f=list(k)
f.sort()
d={}
for i in range(len(f)):
d[f[i]]=i
s=[0]*(4*len(f))
laz=[[1,0] for i in range(4*len(f))]
for i in range(q):
update(0,0,len(f)-1,d[b[i][0]],d[b[i][1]],[b[i][2],b[i][3]])
ans=[]
for i in range(n):
x=range1(0,0,len(f)-1,d[a[i]],d[a[i]])
ans.append(str(x))
stdout.write(" ".join(ans))
I2ltcG9ydCBzeXMKbW9kPSgxMCoqOSkrNwpmcm9tIHN5cyBpbXBvcnQgc3RkaW4sIHN0ZG91dAojc3lzLnNldHJlY3Vyc2lvbmxpbWl0KDEwKio2KQojaW1wb3J0IHRocmVhZGluZwojdGhyZWFkaW5nLnN0YWNrX3NpemUoMioqMjYpCmRlZiBhaW4oKToKICAgIHJldHVybiBtYXAoaW50LHNpbigpLnNwbGl0KCkpCmRlZiBzaW4oKToKICAgIHJldHVybiBzdGRpbi5yZWFkbGluZSgpLnN0cmlwKCkKIiIiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiIiIKZGVmIGxjKHgpOgogICAgcmV0dXJuICgyKngpKzEKZGVmIHJjKHgpOgogICAgcmV0dXJuICgyKngpKzIKZGVmIHVwZGF0ZShpLGwscixjbCxjcix2KToKICAgIGlmKGw+ciBvciBsPmNyIG9yIHI8Y2wpOgogICAgICAgIHJldHVybgogICAgaWYobGF6W2ldIT1bMSwwXSk6CiAgICAgICAgc1tpXT0oc1tpXSpsYXpbaV1bMF0pJW1vZAogICAgICAgIHNbaV09KHNbaV0rKGxheltpXVsxXSooci1sKzEpKSVtb2QpJW1vZAogICAgICAgIGlmKGwhPXIpOgogICAgICAgICAgICBsYXpbbGMoaSldWzBdPShsYXpbbGMoaSldWzBdKmxheltpXVswXSklbW9kCiAgICAgICAgICAgIGxheltsYyhpKV1bMV09KGxheltsYyhpKV1bMV0qbGF6W2ldWzBdKSVtb2QKICAgICAgICAgICAgbGF6W2xjKGkpXVsxXT0obGF6W2xjKGkpXVsxXStsYXpbaV1bMV0pJW1vZAogICAgICAgICAgICBsYXpbcmMoaSldWzBdPShsYXpbcmMoaSldWzBdKmxheltpXVswXSklbW9kCiAgICAgICAgICAgIGxheltyYyhpKV1bMV09KGxheltyYyhpKV1bMV0qbGF6W2ldWzBdKSVtb2QKICAgICAgICAgICAgbGF6W3JjKGkpXVsxXT0obGF6W3JjKGkpXVsxXStsYXpbaV1bMV0pJW1vZAogICAgICAgIGxheltpXT1bMSwwXQogICAgaWYobD49Y2wgYW5kIHI8PWNyKToKICAgICAgICBzW2ldPShzW2ldKnZbMF0pJW1vZAogICAgICAgIHNbaV09KHNbaV0rKHZbMV0qKHItbCsxKSklbW9kKSVtb2QKICAgICAgICBpZihsIT1yKToKICAgICAgICAgICAgbGF6W2xjKGkpXVswXT0obGF6W2xjKGkpXVswXSp2WzBdKSVtb2QKICAgICAgICAgICAgbGF6W2xjKGkpXVsxXT0obGF6W2xjKGkpXVsxXSp2WzBdKSVtb2QKICAgICAgICAgICAgbGF6W2xjKGkpXVsxXT0obGF6W2xjKGkpXVsxXSt2WzFdKSVtb2QKICAgICAgICAgICAgbGF6W3JjKGkpXVswXT0obGF6W3JjKGkpXVswXSp2WzBdKSVtb2QKICAgICAgICAgICAgbGF6W3JjKGkpXVsxXT0obGF6W3JjKGkpXVsxXSp2WzBdKSVtb2QKICAgICAgICAgICAgbGF6W3JjKGkpXVsxXT0obGF6W3JjKGkpXVsxXSt2WzFdKSVtb2QKICAgICAgICByZXR1cm4KICAgIG1pZD0obCtyKS8yCiAgICB1cGRhdGUobGMoaSksbCxtaWQsY2wsY3IsdikKICAgIHVwZGF0ZShyYyhpKSxtaWQrMSxyLGNsLGNyLHYpCiAgICBzW2ldPShzW2xjKGkpXStzW3JjKGkpXSklbW9kCmRlZiByYW5nZTEoaSxsLHIsY2wsY3IpOgogICAgaWYobD5yIG9yIGw+Y3Igb3IgcjxjbCk6CiAgICAgICAgcmV0dXJuIDAKICAgIGlmKGxheltpXSE9WzEsMF0pOgogICAgICAgIHNbaV09KHNbaV0qbGF6W2ldWzBdKSVtb2QKICAgICAgICBzW2ldPShzW2ldKyhsYXpbaV1bMV0qKHItbCsxKSklbW9kKSVtb2QKICAgICAgICBpZihsIT1yKToKICAgICAgICAgICAgbGF6W2xjKGkpXVswXT0obGF6W2xjKGkpXVswXSpsYXpbaV1bMF0pJW1vZAogICAgICAgICAgICBsYXpbbGMoaSldWzFdPShsYXpbbGMoaSldWzFdKmxheltpXVswXSklbW9kCiAgICAgICAgICAgIGxheltsYyhpKV1bMV09KGxheltsYyhpKV1bMV0rbGF6W2ldWzFdKSVtb2QKICAgICAgICAgICAgbGF6W3JjKGkpXVswXT0obGF6W3JjKGkpXVswXSpsYXpbaV1bMF0pJW1vZAogICAgICAgICAgICBsYXpbcmMoaSldWzFdPShsYXpbcmMoaSldWzFdKmxheltpXVswXSklbW9kCiAgICAgICAgICAgIGxheltyYyhpKV1bMV09KGxheltyYyhpKV1bMV0rbGF6W2ldWzFdKSVtb2QKICAgICAgICBsYXpbaV09WzEsMF0KICAgIGlmKGw+PWNsIGFuZCByPD1jcik6CiAgICAgICAgICAgIHJldHVybiBzW2ldCiAgICBtaWQ9KGwrcikvMgogICAgcDE9cmFuZ2UxKGxjKGkpLGwsbWlkLGNsLGNyKQogICAgcDI9cmFuZ2UxKHJjKGkpLG1pZCsxLHIsY2wsY3IpCiAgICByZXR1cm4gKHAxK3AyKSVtb2QKbixxPWFpbigpCmE9YWluKCkKaz1zZXQoYSkKYj1bXQpmb3IgaSBpbiByYW5nZShxKToKICAgIGwscix4LHk9YWluKCkKICAgIGsuYWRkKGwpCiAgICBrLmFkZChyKQogICAgYi5hcHBlbmQoW2wscix4JW1vZCx5JW1vZF0pCmY9bGlzdChrKQpmLnNvcnQoKQpkPXt9CmZvciBpIGluIHJhbmdlKGxlbihmKSk6CiAgICBkW2ZbaV1dPWkKcz1bMF0qKDQqbGVuKGYpKQpsYXo9W1sxLDBdIGZvciBpIGluIHJhbmdlKDQqbGVuKGYpKV0KZm9yIGkgaW4gcmFuZ2UocSk6CiAgICB1cGRhdGUoMCwwLGxlbihmKS0xLGRbYltpXVswXV0sZFtiW2ldWzFdXSxbYltpXVsyXSxiW2ldWzNdXSkKYW5zPVtdCmZvciBpIGluIHJhbmdlKG4pOgogICAgeD1yYW5nZTEoMCwwLGxlbihmKS0xLGRbYVtpXV0sZFthW2ldXSkKICAgIGFucy5hcHBlbmQoc3RyKHgpKQpzdGRvdXQud3JpdGUoIiAiLmpvaW4oYW5zKSk=