#include <bits/stdc++.h>
using namespace std;
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("avx,avx2,fma")
#define ll long long
#define fi first
#define se second
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define pi pair<int, int>
#define pl pair<ll,ll>
#define all(x) (x).begin(),(x).end()
const int mod=1e9+7;
int get(int x, int y) {
ll mx=max(abs(x),abs(y));
mx--;
ll t=(2ll*mx+1)*(2ll*mx+1)%mod;
if (x==mx+1 && y==-mx-1) {
return (2ll*mx+3)*(2ll*mx+3)%mod;
}
if (x==mx+1) {
return (t+mx+1+y)%mod;
}
t+=(mx+1)*2;
t%=mod;
if (y==mx+1) {
return (t+mx+1-x)%mod;
}
t+=(mx+1)*2;
t%=mod;
if (x==-mx-1) {
return (t+mx+1-y)%mod;
}
t+=(mx+1)*2;
t%=mod;
return (t+mx+1+x)%mod;
}
int getupright(ll x, ll y) {
if (x==0 || y==0) {
return 0;
}
ll mn=min(x,y);
ll t=0;
// ((2x+1)**2+2+2x)*(2x+1)
// (4x**2+6x+3)*(2x+1)
// 8x**3 + 16x**2 + 12x + 3
t+=(3*mn%mod) + (mn*(mn-1)*6%mod) + ((mn-1)*mn%mod*(2*mn-1)%mod*8%mod*333333336%mod) + (mn*mn%mod*(mn-1)%mod*(mn-1)%mod*2%mod);
t%=mod;
if (x>y) {
ll num=get(y+1,1);
t+=num*y%mod*(x-y)%mod;
t%=mod;
t+=y*(y-1ll)/2%mod*(x-y)%mod;
t%=mod;
// [y+1,x-1]
// (1+8x)*(X-x)
// X + 8xX -x -8x**2 = -8x**2 + (8X-1)*x + X
if (x-y>=2) {
t+=((x-1)*x%mod*(2*x-1)%mod*-4%mod*333333336%mod-(y)*(y+1)%mod*(2*y+1)%mod*-4%mod*333333336%mod)*y%mod;
t+=((8*x-1)%mod*(x*(x-1)/2%mod)%mod-(8*x-1)%mod*(y*(y+1)/2%mod)%mod)*y%mod;
t+=((x-y-1)*x%mod)*y%mod;
t%=mod;
t=(t+mod)%mod;
}
}
else if (y>x) {
ll num=get(x,x+1);
t+=num*x%mod*(y-x)%mod;
t%=mod;
t+=x*(x-1ll)/2%mod*(y-x)%mod;
t%=mod;
// [x+1,y-1]
// (3+8z)*(y-z)
// 3y -3z + 8zy - 8z**2 = -8*z**2 + (8y-3)*z + 3y
if (y-x>=2) {
t+=((y-1)*y%mod*(2*y-1)%mod*-4%mod*333333336%mod-(x)*(x+1)%mod*(2*x+1)%mod*-4%mod*333333336%mod)*x%mod;
t+=((8*y-3)%mod*(y*(y-1)/2%mod)%mod-(8*y-3)%mod*(x*(x+1)/2%mod)%mod)*x%mod;
t+=((y-x-1)*3*y%mod)*x%mod;
t%=mod;
t=(t+mod)%mod;
}
}
return t;
}
int getupleft(ll x, ll y) {
if (x==0 || y==0) {
return 0;
}
ll mn=min(-x,y);
ll mx=max(-x,y);
ll t=0;
// (2x-1)*2x = 4x**2 - 2x
t+=mn*(mn+1)%mod*(2*mn+1)*2%mod*333333336%mod;
t+=-mn*(mn+1)%mod;
t%=mod;
t=(t+mod)%mod;
ll add1=(mn+1)*2;
ll add2=(mx)*2;
t+=(add1+add2)*(mx-mn)/2%mod*mn%mod;
t%=mod;
t+=getupright(y,-x);
return t;
}
int getdownleft(ll x, ll y) {
if (x==0 || y==0) {
return 0;
}
ll mn=min(-x,-y);
ll mx=max(-x,-y);
ll t=0;
t+=mn*(mn+1)%mod*(2*mn+1)*4%mod*333333336%mod;
t+=-mn*(mn+1)*2%mod;
t%=mod;
t=(t+mod)%mod;
ll add1=(mn+1)*4;
ll add2=(mx)*4;
t+=(add1+add2)*(mx-mn)/2%mod*mn%mod;
t%=mod;
t+=getupright(-x,-y);
return t;
}
int getdownright(ll x, ll y) {
x--;
if (x==0 || y==0) {
return 0;
}
ll mn=min(x,-y);
ll mx=max(x,-y);
ll t=0;
t+=-x*y%mod;
t+=mn*(mn+1)%mod*(2*mn+1)*6%mod*333333336%mod;
t+=-mn*(mn+1)*3%mod;
t%=mod;
t=(t+mod)%mod;
ll add1=(mn+1)*6;
ll add2=(mx)*6;
t+=(add1+add2)*(mx-mn)/2%mod*mn%mod;
t%=mod;
t+=getupright(-y,x);
return t;
}
int getright(ll x) {
if (x==0) {
return 0;
}
ll num=2;
ll t=0;
t+=num*x%mod;
t%=mod;
t+=(x-1)*x%mod*(2*x-1)%mod*-4%mod*333333336%mod;
t+=(8*x-1)%mod*(x*(x-1)/2%mod)%mod;
t+=(x-1)*x%mod;
t%=mod;
t=(t+mod)%mod;
return t;
}
int getup(ll x) {
if (x==0) {
return 0;
}
ll t=0;
t+=(2+2*x)*x/2%mod;
t+=getright(x);
t%=mod;
return t;
}
int getleft(ll x) {
if (x==0) {
return 0;
}
ll t=0;
t+=(4+4*(-x))*(-x)/2%mod;
t+=getright(-x);
t%=mod;
return t;
}
int getdown(ll x) {
if (x==0) {
return 0;
}
ll t=0;
t+=(6+6*(-x))*(-x)/2%mod;
t+=getright(-x);
t%=mod;
return t;
}
int getdown2(ll x) {
if (x==0) {
return 0;
}
ll t=0;
t+=-x%mod;
t+=getdown(x);
t%=mod;
return t;
}
int32_t main() {
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
int n,q;
cin >> n >> q;
int x1,y1,x2,y2;
for (int i=0; i<q; i++) {
cin >> x1 >> y1 >> x2 >> y2;
ll ans=0;
ans+=getupright(max(0,x2),max(0,y2));
ans-=getupright(max(0,x2),max(0,y1-1));
ans-=getupright(max(0,x1-1),max(0,y2));
ans+=getupright(max(0,x1-1),max(0,y1-1));
ans+=getupleft(min(0,x1),max(0,y2));
ans-=getupleft(min(0,x1),max(0,y1-1));
ans-=getupleft(min(0,x2+1),max(0,y2));
ans+=getupleft(min(0,x2+1),max(0,y1-1));
ans+=getdownleft(min(0,x1),min(0,y1));
ans-=getdownleft(min(0,x1),min(0,y2+1));
ans-=getdownleft(min(0,x2+1),min(0,y1));
ans+=getdownleft(min(0,x2+1),min(0,y2+1));
ans+=getdownright(max(1,x2),min(0,y1));
ans-=getdownright(max(1,x2),min(0,y2+1));
ans-=getdownright(max(1,x1-1),min(0,y1));
ans+=getdownright(max(1,x1-1),min(0,y2+1));
if (y1<=0 && y2>=0) {
ans+=getright(max(0,x2));
ans-=getright(max(0,x1-1));
}
if (x1<=0 && x2>=0) {
ans+=getup(max(0,y2));
ans-=getup(max(0,y1-1));
}
if (y1<=0 && y2>=0) {
ans+=getleft(min(0,x1));
ans-=getleft(min(0,x2+1));
}
if (x1<=0 && x2>=0) {
ans+=getdown(min(0,y1));
ans-=getdown(min(0,y2+1));
}
if (x1<=1 && x2>=1) {
ans+=getdown2(min(0,y1));
ans-=getdown2(min(0,y2+1));
}
if (x1<=0 && x2>=0 && y1<=0 && y2>=0) {
ans+=1;
}
ans%=mod;
cout << ans << '\n';
}
return 0;
}