#include <bits/stdc++.h>
using namespace std;
long long int modexpo(long long int x, long long int y) {
  if (y == 0) return 1;
  if (y % 2) {
    long long int viky = modexpo(x, y / 2);
    return (((x * viky) % 1000000007) * viky) % 1000000007;
  } else {
    long long int viky = modexpo(x, y / 2);
    return (viky * viky) % 1000000007;
  }
}
long long int ap[1000011], ap1[1000011];
vector<long long int> v[1000011];
long long int visited[1000011];
long long int kk = 0, ans[1000011];
void dfs(long long int s) {
  visited[s] = 1;
  ap[kk] = ans[s];
  ap1[kk] = s;
  kk++;
  for (auto x : v[s]) {
    if (!visited[x]) {
      dfs(x);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long int t, i, j, l, r, q, k, x, m, n;
  cin >> n >> m;
  for (i = 1; i <= n; i++) {
    cin >> ans[i];
  }
  for (i = 1; i <= m; i++) {
    cin >> l >> r;
    v[l].push_back(r);
    v[r].push_back(l);
  }
  for (i = 1; i <= n; i++) {
    if (!visited[i]) {
      kk = 0;
      dfs(i);
      sort(ap, ap + kk);
      reverse(ap, ap + kk);
      sort(ap1, ap1 + kk);
      for (j = 0; j < kk; j++) {
        ans[ap1[j]] = ap[j];
      }
    }
  }
  for (i = 1; i <= n; i++) {
    cout << ans[i] << " ";
  }
  return 0;
}
