#include <bits/stdc++.h>
using namespace std;
void merge(long long int arr[], long long int l, long long int m,
           long long int r) {
  long long int i, j, k;
  long long int n1 = m - l + 1;
  long long int n2 = r - m;
  long long int L[n1], R[n2];
  for (i = 0; i < n1; i++) L[i] = arr[l + i];
  for (j = 0; j < n2; j++) R[j] = arr[m + 1 + j];
  i = 0;
  j = 0;
  k = l;
  while (i < n1 && j < n2) {
    if (L[i] <= R[j]) {
      arr[k] = L[i];
      i++;
    } else {
      arr[k] = R[j];
      j++;
    }
    k++;
  }
  while (i < n1) {
    arr[k] = L[i];
    i++;
    k++;
  }
  while (j < n2) {
    arr[k] = R[j];
    j++;
    k++;
  }
}
void mergeSort(long long int arr[], long long int l, long long int r) {
  if (l < r) {
    long long int m = l + (r - l) / 2;
    mergeSort(arr, l, m);
    mergeSort(arr, m + 1, r);
    merge(arr, l, m, r);
  }
}
long long int binarySearch(long long int arr[], long long int l,
                           long long int r, long long int x) {
  while (l <= r) {
    long long int m = l + (r - l) / 2;
    if (arr[m] == x) return m;
    if (arr[m] < x)
      l = m + 1;
    else
      r = m - 1;
  }
  return -1;
}
long long int ans(long long int t, long long int a[]) {
  long long int temp = 0;
  for (long long int i = t; i >= 0; i--) {
    if (a[i] == a[t]) {
      continue;
    } else {
      temp = i + 1;
      break;
    }
  }
  return temp;
}
int main() {
  long long int n, k, temp1, temp2, temp;
  cin >> n >> k;
  long long int a[n], c[n], key[n];
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    c[i] = a[i];
    key[i] = 0;
  }
  for (int i = 0; i < k; i++) {
    temp = 0;
    cin >> temp1;
    cin >> temp2;
    if (a[temp2 - 1] < a[temp1 - 1]) {
      key[temp1 - 1]--;
    }
    if (a[temp1 - 1] < a[temp2 - 1]) {
      key[temp2 - 1]--;
    }
  }
  sort(c, c + n);
  temp = 0;
  for (int i = 0; i < n; i++) {
    temp = std::lower_bound(c, c + n, a[i]) - c;
    key[i] += temp;
    cout << key[i] << " ";
  }
  return 0;
}
