//package competitive.coding; import java.util.*; /****************************************** * AUTHOR: AMAN KUMAR SINGH * * INSTITUITION: KALYANI GOVERNMENT ENGINEERING COLLEGE * ******************************************/ class CompetitiveCoding{ static long modInverse(long a, long m){ long m0 = m; long y = 0, x = 1; if (m == 1) return 0; while (a > 1) { long q = a / m; long t = m; m = a % m; a = t; t = y; y = x - q * y; x = t; } if (x < 0) x += m0; return x; } public static void main (String[] args) throws java.lang.Exception{ Scanner in = new Scanner(System.in); long MOD_VAL=1000000007; int t=in.nextInt(); while(t-->0){ long n=in.nextLong(); int q=in.nextInt(); while(q-->0){ long l=in.nextLong(); long r=in.nextLong(); long sum=0; if(n%2==0){ long x=n/2; if(l<=x && r<=x){ long first_term=(2*l-1)%MOD_VAL; long last_term=(2*r-1)%MOD_VAL; long no_of_terms=r-l+1; sum=((no_of_terms%MOD_VAL)*((first_term+last_term)%MOD_VAL))%MOD_VAL; sum=(sum*modInverse(2,MOD_VAL))%MOD_VAL; } else if(l>=x && r>=x){ long first_term=(2*(l-n/2))%MOD_VAL; long last_term=(2*(r-n/2))%MOD_VAL; long no_of_terms=r-l+1; sum=((no_of_terms%MOD_VAL)*((first_term+last_term)%MOD_VAL))%MOD_VAL; sum=(sum*modInverse(2,MOD_VAL))%MOD_VAL; } else{ long sum1=0,sum2=0; long first_term1=(2*l-1)%MOD_VAL; long last_term1=(2*(n/2)-1)%MOD_VAL; long no_of_terms1=n/2-l+1; sum1=((no_of_terms1%MOD_VAL)*((first_term1+last_term1)%MOD_VAL))%MOD_VAL; sum1=(sum1*modInverse(2,MOD_VAL))%MOD_VAL; long first_term2=2; long last_term2=(2*(r-n/2))%MOD_VAL; long no_of_terms2=r-x; sum2=((no_of_terms2%MOD_VAL)*((first_term2+last_term2)%MOD_VAL))%MOD_VAL; sum2=(sum2*modInverse(2,MOD_VAL))%MOD_VAL; sum=(sum1+sum2)%MOD_VAL; } } else{ long x=n/2+1; if(l<=x && r<=x){ long first_term=(2*l-1)%MOD_VAL; long last_term=(2*r-1)%MOD_VAL; long no_of_terms=r-l+1; sum=((no_of_terms%MOD_VAL)*((first_term+last_term)%MOD_VAL))%MOD_VAL; sum=(sum*modInverse(2,MOD_VAL))%MOD_VAL; } else if(l>x && r>=x){ long first_term=(2*(l-x))%MOD_VAL; long last_term=(2*(r-x))%MOD_VAL; long no_of_terms=r-l+1; sum=((no_of_terms%MOD_VAL)*((first_term+last_term)%MOD_VAL))%MOD_VAL; sum=(sum*modInverse(2,MOD_VAL))%MOD_VAL; } else{ long sum1=0,sum2=0; long first_term1=(2*l-1)%MOD_VAL; long last_term1=(2*x-1)%MOD_VAL; long no_of_terms1=x-l+1; sum1=((no_of_terms1%MOD_VAL)*((first_term1+last_term1)%MOD_VAL))%MOD_VAL; sum1=(sum1*modInverse(2,MOD_VAL))%MOD_VAL; long first_term2=2; long last_term2=(2*(r-x))%MOD_VAL; long no_of_terms2=r-x; sum2=((no_of_terms2%MOD_VAL)*((first_term2+last_term2)%MOD_VAL))%MOD_VAL; sum2=(sum2*modInverse(2,MOD_VAL))%MOD_VAL; sum=(sum1+sum2)%MOD_VAL; } } System.out.println(sum); } } } }