#include <bits/stdc++.h>
using namespace std;
const int MX = 2e5 + 11;
int N, M, k;
int arr[MX];
char s[MX];
struct node {
  int to[26];
  int win, lose;
  node() {
    memset(to, -1, sizeof to);
    win = 1;
    lose = 0;
  }
};
vector<node> v;
void add(string s) {
  int cur = 0;
  for (int i = 0; i < s.size(); i++) {
    int a = s[i] - 'a';
    if (v[cur].to[a] == -1) {
      v[cur].to[a] = v.size();
      v.push_back(node());
    }
    cur = v[cur].to[a];
  }
}
void calc(int cur) {
  bool isLeaf = 1, w = 0, l = 0;
  for (int i = 0; i < 26; i++) {
    if (v[cur].to[i] != -1) {
      calc(v[cur].to[i]);
      isLeaf = 0;
      int ch = v[cur].to[i];
      w |= v[ch].win;
      l |= v[ch].lose;
    }
  }
  if (isLeaf) {
    v[cur].lose = 0;
    v[cur].win = 1;
  } else {
    v[cur].lose = !l;
    v[cur].win = !w;
  }
}
void solve() {
  v.push_back(node());
  scanf("%d%d", &N, &k);
  for (int i = 0; i < N; i++) {
    scanf("%s", s);
    string second = s;
    add(second);
  }
  calc(0);
  v[0].win = v[0].lose = 0;
  for (int i = 0; i < 26; i++) {
    if (v[0].to[i] != -1) {
      int ch = v[0].to[i];
      v[0].win |= v[ch].win;
      v[0].lose |= v[ch].lose;
    }
  }
  if (v[0].win && v[0].lose) {
    cout << "First\n";
  } else if (v[0].win && (k & 1)) {
    cout << "First\n";
  } else {
    cout << "Second\n";
  }
}
int main() {
  int t = 1;
  while (t--) solve();
  return 0;
}
