#include <cstdlib>
#include <cstdio>
#include <algorithm>

using namespace std;

const int MaxN = 100010;
const int MaxM = 100010;


int n, m, sum;

struct Point {
	int x;			// type =  1 => levi kraj segmenta
	int type;		// type =  0 => jedna od m tacaka
	int num;		// type = -1 => desni kraj segmenta
};

Point a[2 * MaxN + MaxM];
int sol[MaxM];

bool cmp(Point A, Point B) {
	return ((A.x < B.x) || (A.x == B.x && A.type > B.type));
}

int main() {

	scanf("%d%d", &n, &m);
	for (int i = 0; i < m; i++) {
		scanf("%d", &a[i].x);
		a[i].type = 0;
		a[i].num = i;
	}
	for (int i = 0; i < n; i++) {
		scanf("%d%d", &a[m + 2 * i].x, &a[m + 2 * i + 1].x);
		a[m + 2 * i].type = 1;  
		a[m + 2 * i + 1].type = -1; 
	}

	sort(a, a + m + 2 * n, cmp);

	sum = 0;
	for (int i = 0; i < m + 2 * n; i++) {
		if (a[i].type == 0) 
			sol[ a[i].num ] = sum;
		else 
			sum += a[i].type;
	}

	for (int i = 0; i < m; i++)
		printf("%d\n", sol[i]);

	return 0;
}