using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Takmicenje_DrugiZadatak
{
    internal class Program
    {
        static void Stanja(UspesnaKupovina[] Kupovine, long i, long Uposedu, long pojedeni, ref List<Stanje> cp)
        {
            if (i>=Kupovine.Length) return;
            long ProtekliDani = Kupovine[i].dan-Kupovine[i-1].dan;
            Uposedu += Kupovine[i - 1].kolicina;
            if (Uposedu >= ProtekliDani)
            {
                Uposedu -= ProtekliDani;
                pojedeni += ProtekliDani;
            }
            else
            {
                pojedeni += Uposedu;
                Uposedu = 0;
            }
            Stanje TrenutnoStanje = new Stanje();
            TrenutnoStanje.dan = Kupovine[i].dan;
            TrenutnoStanje.pojedeni = pojedeni;
            TrenutnoStanje.Uposedu = Uposedu + Kupovine[i].kolicina;
            cp.Add(TrenutnoStanje);
            i++;
            Stanja(Kupovine, i, Uposedu, pojedeni, ref cp);
        }
        static void Main(string[] args)
        {
            string[] s = Console.ReadLine().Trim().Split();
            int N = int.Parse(s[0]);
            long Q = long.Parse(s[1]);
            UspesnaKupovina[] Kupovine = new UspesnaKupovina[N];
            for (long i = 0; i < N; i++)
            {
                s = Console.ReadLine().Trim().Split();
                Kupovine[i].dan=long.Parse(s[0]);
                Kupovine[i].kolicina=long.Parse(s[1]);
            }
            long[] q = new long[Q];
            for (long i = 0; i < Q; i++)
            {
                q[i]=long.Parse(Console.ReadLine().Trim());
            }

            List<Stanje> cp = new List<Stanje>();
            Stanje stanje = new Stanje();
            stanje.dan = Kupovine[0].dan;
            stanje.pojedeni = 0;
            stanje.Uposedu = Kupovine[0].kolicina;
            cp.Add(stanje);
            Stanja(Kupovine, 1, 0, 0, ref cp);
            long pojedeni=0;
            foreach (long d in q)
            {
                if (d < Kupovine[0].dan)
                {
                    pojedeni=0;
                    Console.WriteLine(pojedeni);
                    continue;
                }
                long j = d;
                int a = N - 1;
                bool tf = true;
                while (tf)
                {
                    if (j < cp[a].dan)
                        a--;
                    else
                    {
                        long ProsloDana=j-cp[a].dan;
                        if (cp[a].Uposedu >= ProsloDana)
                            Console.WriteLine(cp[a].pojedeni+ProsloDana+1);
                        else
                            Console.WriteLine(cp[a].pojedeni + cp[a].Uposedu);
                        tf= false;
                    }
                }
            }
            
            Console.ReadLine();

        }

        struct UspesnaKupovina
        {
            public long dan;
            public long kolicina;
        }
        struct Stanje
        {
            public long dan;
            public long pojedeni;
            public long Uposedu;
        }
    }
}