#include <bits/stdc++.h>
using namespace std;

typedef vector<vector<int>> Graph;

void dfs(Graph& g, vector<int>& h, vector<int>& used, int u) {
	random_shuffle(begin(g[u]), end(g[u]));
	used[u] = 1;
	for(int v : g[u]) {
		if( !used[v] ) {
			dfs(g,h,used,v);
		}
		h[u] = min(h[u], h[v]);
	}
}

int main() {
	
	int n,m;
	while( cin>>n>>m ) {
		Graph g(n);
		for(int i = 0; i < m; i++) {
			int u,v; cin>>u>>v;
			g[u].push_back(v);
		}
		vector<int> h(n);
		for(int i = 0; i < n; i++)
			cin>>h[i];
		vector<int> permutation(n);
		for(int i = 0; i < n; i++)
			permutation[i] = i;
		for(int step = 0; step < 25; step++) {
			vector<int> used(n);
			random_shuffle(begin(permutation), end(permutation));
			for(int start = 0; start < n; start++)
				if( !used[permutation[start]])
					dfs(g,h,used,permutation[start]);
		}
		for(int i = 0; i < n; i++)
			cout<<h[i]<<" ";
		cout<<"\n";
	}
	
	return 0;
}