/*
#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<vector>
#include<map>
#include<stack>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
stack<char>q;
stack<int>p;
int main()
{
	string s;
	while (cin >> s) {
		while (!q.empty()) {
			q.pop();
		}
		while (!p.empty()) {
			p.pop();
		}
		int sum ,a;
		for (int i = 0; i < s.size(); i++) {
			sum = 0;
			if (s[i] >= '0' && s[i] <= '9') { 
				p.push(s[i] - '0');
				
			}
			else {
				if (!q.empty()) {
					if (s[i] == '+' || s[i] == '-') {
						if (q.top() == '-')a = p.top(), p.pop(), sum = p.top() - a, p.pop(),p.push(sum), q.top(), q.push(s[i]);
						else if (q.top() == '+')a = p.top() , p.pop(), sum =  p.top() + a, p.pop(), p.push(sum), q.top(), q.push(s[i]);
						else if (q.top() == '*')a = p.top() , p.pop(), sum = p.top()  * a, p.pop(), p.push(sum), q.top(), q.push(s[i]);
						else if (q.top() == '/')a = p.top() , p.pop(), sum = p.top()  / a, p.pop(), p.push(sum), q.top(), q.push(s[i]);
						else if (q.top() == '(')q.push(s[i]);

					}
					else if (s[i] == '*' || s[i] == '/') {
						if (q.top() == '-' || q.top() == '+')q.push(s[i]);
						else if (q.top() == '*')a = p.top() , p.pop(), sum = p.top()* a, p.pop(), p.push(sum), q.top(), q.push(s[i]);
						else if (q.top() == '/')a = p.top() , p.pop(), sum = p.top() / a, p.pop(), p.push(sum), q.top(), q.push(s[i]);
						else if (q.top() == '(')q.push(s[i]);
					}
					else if (s[i] == '(')q.push(s[i]);
					else {
						while (q.top() != '(') {
							if (q.top() == '-')a = p.top() , p.pop(), sum = p.top() - a, p.pop(), p.push(sum), q.pop();
							else if (q.top() == '+')a = p.top() , p.pop(), sum =p.top()  + a, p.pop(), p.push(sum), q.pop();
							else if (q.top() == '*')a = p.top() , p.pop(), sum = p.top() * a, p.pop(), p.push(sum), q.pop();
							else if (q.top() == '/')a = p.top() , p.pop(), sum = p.top() / a, p.pop(), p.push(sum), q.pop();
						}
						q.pop();
					}
				}
				else
				{
					q.push(s[i]);
				}
			}
		}
		while (!q.empty()) {
			if (q.top() == '-')a = p.top(), p.pop(), sum = p.top() - a, p.pop(), p.push(sum), q.pop();
			else if (q.top() == '+')a = p.top(), p.pop(), sum = p.top() + a, p.pop(), p.push(sum), q.pop();
			else if (q.top() == '*')a = p.top(), p.pop(), sum = p.top() * a, p.pop(), p.push(sum), q.pop();
			else if (q.top() == '/')a = p.top(), p.pop(), sum = p.top() / a, p.pop(), p.push(sum), q.pop();
		}
		cout << p.top() << endl;
	}
}
*/
#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<vector>
#include<map>
#include<stack>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
using namespace std;
const ll N = 1e9+7;


int main()
{
	int t;
	cin >> t;
	while (t--) {
		ll n, k;
		cin >> n >> k;
		ll sum = 1;
		for (int i = 1; i <= k; i++) {
			sum = sum * n%N ;
		}
		cout << sum << endl;
	}
}
