#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int n, m;
int a[maxn], par[maxn], t[maxn];
vector<int> g[maxn];
int get_par(int v) { return (par[v] == -1) ? v : par[v] = get_par(par[v]); }
void merge(int u, int v) {
  u = get_par(u);
  v = get_par(v);
  if (v == u) return;
  par[u] = v;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  cin >> n >> m;
  memset(par, -1, sizeof par);
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    merge(u, v);
  }
  for (int i = 1; i <= n; i++) g[get_par(i)].push_back(a[i]);
  for (int i = 1; i <= n; i++) sort(g[i].begin(), g[i].end());
  for (int i = 1; i <= n; i++) {
    cout << g[get_par(i)].back() << ' ';
    g[get_par(i)].pop_back();
  }
  cout << '\n';
  return 0;
}
